• T
    workqueue: implement mod_delayed_work[_on]() · 8376fe22
    Tejun Heo 提交于
    Workqueue was lacking a mechanism to modify the timeout of an already
    pending delayed_work.  delayed_work users have been working around
    this using several methods - using an explicit timer + work item,
    messing directly with delayed_work->timer, and canceling before
    re-queueing, all of which are error-prone and/or ugly.
    
    This patch implements mod_delayed_work[_on]() which behaves similarly
    to mod_timer() - if the delayed_work is idle, it's queued with the
    given delay; otherwise, its timeout is modified to the new value.
    Zero @delay guarantees immediate execution.
    
    v2: Updated to reflect try_to_grab_pending() changes.  Now safe to be
        called from bh context.
    Signed-off-by: NTejun Heo <tj@kernel.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    8376fe22
workqueue.c 107.4 KB