From: Alan Stern Since raw_notifier chains don't benefit from any centralized locking protections, they shouldn't suffer from the associated limitations. Under some circumstances it might make sense for a raw_notifier callout routine to unregister itself from the notifier chain. This patch (as678) changes the notifier core to allow for such things. Signed-off-by: Alan Stern Signed-off-by: Andrew Morton --- kernel/sys.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff -puN kernel/sys.c~allow-raw_notifier-callouts-to-unregister-themselves kernel/sys.c --- devel/kernel/sys.c~allow-raw_notifier-callouts-to-unregister-themselves 2006-05-11 15:19:05.000000000 -0700 +++ devel-akpm/kernel/sys.c 2006-05-11 15:19:05.000000000 -0700 @@ -137,14 +137,15 @@ static int __kprobes notifier_call_chain unsigned long val, void *v) { int ret = NOTIFY_DONE; - struct notifier_block *nb; + struct notifier_block *nb, *next_nb; nb = rcu_dereference(*nl); while (nb) { + next_nb = rcu_dereference(nb->next); ret = nb->notifier_call(nb, val, v); if ((ret & NOTIFY_STOP_MASK) == NOTIFY_STOP_MASK) break; - nb = rcu_dereference(nb->next); + nb = next_nb; } return ret; } _