Messages in this thread Patch in this message | | | Date | Sun, 29 Jun 2008 18:49:27 +0400 | From | Oleg Nesterov <> | Subject | [PATCH 3/3] workqueues: schedule_on_each_cpu: use flush_work() |
| |
Change schedule_on_each_cpu() to use flush_work() instead of flush_workqueue(), this way we don't wait for other work_struct's which can be queued meanwhile.
Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
--- 26-rc2/kernel/workqueue.c~WQ_3_USE_FLUSH_WORK 2008-06-29 18:20:33.000000000 +0400 +++ 26-rc2/kernel/workqueue.c 2008-06-29 18:34:06.000000000 +0400 @@ -653,7 +653,8 @@ int schedule_on_each_cpu(work_func_t fun set_bit(WORK_STRUCT_PENDING, work_data_bits(work)); __queue_work(per_cpu_ptr(keventd_wq->cpu_wq, cpu), work); } - flush_workqueue(keventd_wq); + for_each_online_cpu(cpu) + flush_work(per_cpu_ptr(works, cpu)); put_online_cpus(); free_percpu(works); return 0;
| |