2014-07-26 04:03:10

by Lai Jiangshan

[permalink] [raw]
Subject: [PATCH] kthread_work: wake up worker only when the worker is idle

If the worker task is not idle, it may sleep on some conditions by the request
of the work. Our unfriendly wakeup in the insert_kthread_work() may confuse
the worker.

Signed-off-by: Lai Jiangshan <[email protected]>
---
kernel/kthread.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/kernel/kthread.c b/kernel/kthread.c
index c2390f4..ef48322 100644
--- a/kernel/kthread.c
+++ b/kernel/kthread.c
@@ -591,7 +591,7 @@ static void insert_kthread_work(struct kthread_worker *worker,

list_add_tail(&work->node, pos);
work->worker = worker;
- if (likely(worker->task))
+ if (!worker->current_work && likely(worker->task))
wake_up_process(worker->task);
}

--
1.7.4.4


2014-07-28 18:11:32

by Tejun Heo

[permalink] [raw]
Subject: Re: [PATCH] kthread_work: wake up worker only when the worker is idle

On Sat, Jul 26, 2014 at 12:03:59PM +0800, Lai Jiangshan wrote:
> If the worker task is not idle, it may sleep on some conditions by the request
> of the work. Our unfriendly wakeup in the insert_kthread_work() may confuse
> the worker.
>
> Signed-off-by: Lai Jiangshan <[email protected]>

Applied to wq/for-3.17.

Thanks.

--
tejun