kthread_worker: check all delayed works when destroy kthread worker
When destroying a kthread worker warn if there are still some pending delayed works. This indicates that the caller should clear all pending delayed works before destroying the kthread worker. Link: https://lkml.kernel.org/r/20230104144230.938521-1-qiang1.zhang@intel.com Signed-off-by: Zqiang <qiang1.zhang@intel.com> Acked-by: Tejun Heo <tj@kernel.org> Reviewed-by: Petr Mladek <pmladek@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
dd106111db
commit
eb79fa7ea7
|
@ -1382,6 +1382,10 @@ EXPORT_SYMBOL_GPL(kthread_flush_worker);
|
|||
* Flush and destroy @worker. The simple flush is enough because the kthread
|
||||
* worker API is used only in trivial scenarios. There are no multi-step state
|
||||
* machines needed.
|
||||
*
|
||||
* Note that this function is not responsible for handling delayed work, so
|
||||
* caller should be responsible for queuing or canceling all delayed work items
|
||||
* before invoke this function.
|
||||
*/
|
||||
void kthread_destroy_worker(struct kthread_worker *worker)
|
||||
{
|
||||
|
@ -1393,6 +1397,7 @@ void kthread_destroy_worker(struct kthread_worker *worker)
|
|||
|
||||
kthread_flush_worker(worker);
|
||||
kthread_stop(task);
|
||||
WARN_ON(!list_empty(&worker->delayed_work_list));
|
||||
WARN_ON(!list_empty(&worker->work_list));
|
||||
kfree(worker);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue