diff options
author | Oleg Nesterov <oleg@redhat.com> | 2009-06-11 13:12:55 +0100 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-11 11:26:38 -0700 |
commit | b415c49a864dab8ee90713833d642dd461eccae9 (patch) | |
tree | f5e763afdab9a43ff632993d7be49e73d8a6df6c | |
parent | 6adc74b7d03c06a8e15d51fe33c3d924ada9271a (diff) | |
download | linux-3.10-b415c49a864dab8ee90713833d642dd461eccae9.tar.gz linux-3.10-b415c49a864dab8ee90713833d642dd461eccae9.tar.bz2 linux-3.10-b415c49a864dab8ee90713833d642dd461eccae9.zip |
slow_work_thread() should do the exclusive wait
slow_work_thread() sleeps on slow_work_thread_wq without WQ_FLAG_EXCLUSIVE,
this means that slow_work_enqueue()->__wake_up(nr_exclusive => 1) wakes up all
kslowd threads. This is not what we want, so we change slow_work_thread() to
use prepare_to_wait_exclusive() instead.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | kernel/slow-work.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/slow-work.c b/kernel/slow-work.c index b28d19135f4..521ed2004d6 100644 --- a/kernel/slow-work.c +++ b/kernel/slow-work.c @@ -372,8 +372,8 @@ static int slow_work_thread(void *_data) vsmax *= atomic_read(&slow_work_thread_count); vsmax /= 100; - prepare_to_wait(&slow_work_thread_wq, &wait, - TASK_INTERRUPTIBLE); + prepare_to_wait_exclusive(&slow_work_thread_wq, &wait, + TASK_INTERRUPTIBLE); if (!freezing(current) && !slow_work_threads_should_exit && !slow_work_available(vsmax) && |