notifier_chain_register semantics query!!!

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi All,

Following definition of notifier_chain_register is from kernel/sys.c
and for kernel 2.6.20.1 .

static int notifier_chain_register(struct notifier_block **nl,
               struct notifier_block *n)
{
       while ((*nl) != NULL) {
               if (n->priority > (*nl)->priority)
                       break;
               nl = &((*nl)->next);
       }
       n->next = *nl;
       rcu_assign_pointer(*nl, n);
       return 0;
}

Since the first parameter is passed as a double ptr, the pointer
itself is changed by the traversal and by rcu_assign_pointer(*nl, n) ,
right? And the new value will be address of notifier_block n. This
means the new head of the notifier list is n with the highest
priority( in terms of magnitude atleast ).

My query is ,why are we loosing the notifiers  during traversal in the
first while loop, which have a priority > n->priority ?

I am terribly confused here.
Can somebody help me out here?

Thank you
~psr

--
play the game
-
To unsubscribe from this list: send the line "unsubscribe linux-newbie" 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.linux-learn.org/faqs

[Index of Archives]     [Audio]     [Hams]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Fedora Users]

  Powered by Linux