• Michel Machado's avatar
    rcu: Replace list_first_entry_rcu() with list_first_or_null_rcu() · f88022a4
    Michel Machado authored
    The list_first_entry_rcu() macro is inherently unsafe because it cannot
    be applied to an empty list.  But because RCU readers do not exclude
    updaters, a list might become empty between the time that list_empty()
    claimed it was non-empty and the time that list_first_entry_rcu() is
    invoked.  Therefore, the list_empty() test cannot be separated from the
    list_first_entry_rcu() call.  This commit therefore combines these to
    macros to create a new list_first_or_null_rcu() macro that replaces
    the old (and unsafe) list_first_entry_rcu() macro.
    
    This patch incorporates Paul's review comments on the previous version of
    this patch available here:
    
    https://lkml.org/lkml/2012/4/2/536
    
    This patch cannot break any upstream code because list_first_entry_rcu()
    is not being used anywhere in the kernel (tested with grep(1)), and any
    external code using it is probably broken as a result of using it.
    Signed-off-by: default avatarMichel Machado <michel@digirati.com.br>
    CC: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
    CC: Dipankar Sarma <dipankar@in.ibm.com>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    f88022a4
rculist.h 17.7 KB