• Oleg Nesterov's avatar
    workqueues: introduce __cancel_delayed_work() · 4e49627b
    Oleg Nesterov authored
    cancel_delayed_work() has to use del_timer_sync() to guarantee the timer
    function is not running after return.  But most users doesn't actually
    need this, and del_timer_sync() has problems: it is not useable from
    interrupt, and it depends on every lock which could be taken from irq.
    
    Introduce __cancel_delayed_work() which calls del_timer() instead.
    
    The immediate reason for this patch is
    http://bugzilla.kernel.org/show_bug.cgi?id=13757
    
    
    but hopefully this helper makes sense anyway.
    
    As for 13757 bug, actually we need requeue_delayed_work(), but its
    semantics are not yet clear.
    
    Merge this patch early to resolves cross-tree interdependencies between
    input and infiniband.
    Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
    Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Cc: Roland Dreier <rdreier@cisco.com>
    Cc: Stefan Richter <stefanr@s5r6.in-berlin.de>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    4e49627b
workqueue.h 7.72 KB