• W
    seqlock: Add a new locking reader type · 1370e97b
    Waiman Long 提交于
    The sequence lock (seqlock) was originally designed for the cases where
    the readers do not need to block the writers by making the readers retry
    the read operation when the data change.
    
    Since then, the use cases have been expanded to include situations where
    a thread does not need to change the data (effectively a reader) at all
    but have to take the writer lock because it can't tolerate changes to
    the protected structure.  Some examples are the d_path() function and
    the getcwd() syscall in fs/dcache.c where the functions take the writer
    lock on rename_lock even though they don't need to change anything in
    the protected data structure at all.  This is inefficient as a reader is
    now blocking other sequence number reading readers from moving forward
    by pretending to be a writer.
    
    This patch tries to eliminate this inefficiency by introducing a new
    type of locking reader to the seqlock locking mechanism.  This new
    locking reader will try to take an exclusive lock preventing other
    writers and locking readers from going forward.  However, it won't
    affect the progress of the other sequence number reading readers as the
    sequence number won't be changed.
    Signed-off-by: NWaiman Long <Waiman.Long@hp.com>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    1370e97b
seqlock.h 8.6 KB