• T
    workqueue: allow chained queueing during destruction · c8efcc25
    Tejun Heo 提交于
    Currently, destroy_workqueue() makes the workqueue deny all new
    queueing by setting WQ_DYING and flushes the workqueue once before
    proceeding with destruction; however, there are cases where work items
    queue more related work items.  Currently, such users need to
    explicitly flush the workqueue multiple times depending on the
    possible depth of such chained queueing.
    
    This patch updates the queueing path such that a work item can queue
    further work items on the same workqueue even when WQ_DYING is set.
    The flush on destruction is automatically retried until the workqueue
    is empty.  This guarantees that the workqueue is empty on destruction
    while allowing chained queueing.
    
    The flush retry logic whines if it takes too many retries to drain the
    workqueue.
    Signed-off-by: NTejun Heo <tj@kernel.org>
    Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
    c8efcc25
workqueue.c 101.7 KB