• Lai Jiangshan's avatar
    workqueue: make work_busy() test WORK_STRUCT_PENDING first · 038366c5
    Lai Jiangshan authored
    Currently, work_busy() first tests whether the work has a pool
    associated with it and if not, considers it idle.  This works fine
    even for delayed_work.work queued on timer, as __queue_delayed_work()
    sets cwq on delayed_work.work - a queued delayed_work always has its
    cwq and thus pool associated with it.
    
    However, we're about to update delayed_work queueing and this won't
    hold.  Update work_busy() such that it tests WORK_STRUCT_PENDING
    before the associated pool.  This doesn't make any noticeable behavior
    difference now.
    
    With work_pending() test moved, the function read a lot better with
    "if (!pool)" test flipped to positive.  Flip it.
    
    While at it, lose the comment about now non-existent reentrant
    workqueues.
    
    tj: Reorganized the function and rewrote the description.
    Signed-off-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    038366c5
workqueue.c 106 KB