Re: [PATCH 1/2] seqlock: Add a new blocking reader type

From: Waiman Long
Date: Wed Sep 11 2013 - 12:33:54 EST


On 09/11/2013 10:55 AM, Al Viro wrote:
On Wed, Sep 11, 2013 at 10:28:26AM -0400, Waiman Long wrote:
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 non-blocking readers
by pretending to be a writer.

This patch tries to eliminate this inefficiency by introducing a new
type of blocking reader to the seqlock locking mechanism. This new
blocking reader will not block other non-blocking readers, but will
block other blocking readers and writers.
Umm... That's misleading - it doesn't _block_, it spins. Moroever,
seq_readbegin() also spins in presense of writer; the main property
of this one is that it keeps writers away.

I used "block" in the sense that it will stop a writer from moving forward. I will update the commit log to make that more clear.
Folks, any suggestions on better names? The semantics we are getting is

I will welcome any better name suggestion and will incorporate that in the patch.

-Longman
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/