[PATCH] kthread: Don't cancel a work that is being cancelled

From: qiang.zhang
Date: Thu Jul 02 2020 - 23:02:35 EST


From: Zhang Qiang <qiang.zhang@xxxxxxxxxxxxx>

When canceling a work, if it is found that the work is in
the cancelling state, we should directly exit the cancelled
operation.

Signed-off-by: Zhang Qiang <qiang.zhang@xxxxxxxxxxxxx>
---
kernel/kthread.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/kernel/kthread.c b/kernel/kthread.c
index bfbfa481be3a..1166f2043e67 100644
--- a/kernel/kthread.c
+++ b/kernel/kthread.c
@@ -1103,6 +1103,9 @@ static bool __kthread_cancel_work_sync(struct kthread_work *work, bool is_dwork)
/* Work must not be used with >1 worker, see kthread_queue_work(). */
WARN_ON_ONCE(work->worker != worker);

+ if (work->canceling)
+ goto out_fast;
+
ret = __kthread_cancel_work(work, is_dwork, &flags);

if (worker->current_work != work)
--
2.24.1