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 an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux