Re: [PATCH] Allow lockless traversal of notifier lists

From: Dipankar Sarma
Date: Tue Nov 29 2005 - 01:08:50 EST


On Tue, Nov 29, 2005 at 01:01:58AM +0100, Andi Kleen wrote:
> On Mon, Nov 28, 2005 at 11:12:03PM +0530, Dipankar Sarma wrote:
>
> Ok third version, hopefully Dipankar proof now.
>

Not quite. I spoke without looking at the code of the whole
notifier_call_chain() function.

> + * against parallel traversals.
> *
> * Returns zero on success, or %-ENOENT on failure.
> */
> @@ -171,10 +177,12 @@
> int notifier_call_chain(struct notifier_block **n, unsigned long val, void *v)
> {
> int ret=NOTIFY_DONE;
> - struct notifier_block *nb = *n;
> -
> + struct notifier_block *nb;
> + smp_read_barrier_depends();
> + nb = *n;
> while(nb)
> {
> + smp_read_barrier_depends();
> ret=nb->notifier_call(nb,val,v);
> if(ret&NOTIFY_STOP_MASK)
> {

Looking at the full code, it seems to me that we dereference
the first notifier block only inside the while(nb) loop.
That means the smp_read_barrier_depends() in the while(nb)
loop should be sufficient - IOW, the previous version of
the patch with one smp_read_barrier_depends() was good.
Sorry about the confusion.

Thanks
Dipankar
-
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/