• Paul E. McKenney's avatar
    rcu: Make call_rcu() leak callbacks for debug-object errors · ae150184
    Paul E. McKenney authored
    If someone does a duplicate call_rcu(), the worst thing the second
    call_rcu() could do would be to actually queue the callback the second
    time because doing so corrupts whatever list the callback was already
    queued on.  This commit therefore makes __call_rcu() check the new
    return value from debug-objects and leak the callback upon error.
    This commit also substitutes rcu_leak_callback() for whatever callback
    function was previously in place in order to avoid freeing the callback
    out from under any readers that might still be referencing it.
    
    These changes increase the probability that the debug-objects error
    messages will actually make it somewhere visible.
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Sedat Dilek <sedat.dilek@gmail.com>
    Cc: Davidlohr Bueso <davidlohr.bueso@hp.com>
    Cc: Rik van Riel <riel@surriel.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Tested-by: default avatarSedat Dilek <sedat.dilek@gmail.com>
    Reviewed-by: default avatarJosh Triplett <josh@joshtriplett.org>
    ae150184
rcu.h 4.03 KB