Messages in this thread Patch in this message | | | Date | Mon, 13 Apr 2009 20:17:33 +0200 | From | Oleg Nesterov <> | Subject | [PATCH] 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. Afaics this is not what we want, change slow_work_thread() to use prepare_to_wait_exclusive().
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
--- 6.30/kernel/slow-work.c~1_SW_EXCLUSIVE 2009-04-06 00:03:42.000000000 +0200 +++ 6.30/kernel/slow-work.c 2009-04-13 19:40:20.000000000 +0200 @@ -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) &&
| |