kthread_worker: reimplement flush_kthread_work() to allow freeing the work item being...
authorTejun Heo <tj@kernel.org>
Thu, 19 Jul 2012 20:52:53 +0000 (13:52 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 2 Oct 2012 17:30:40 +0000 (10:30 -0700)
commit97ed537eaa6ff11c9a1df342364e25d0996bc117
treee8aae3109bf171e537f3472f5a1e66edd3c0255e
parent34b6567e91b3ff6209c16b3868ec95e0e1cddc1f
kthread_worker: reimplement flush_kthread_work() to allow freeing the work item being executed

commit 46f3d976213452350f9d10b0c2780c2681f7075b upstream.

kthread_worker provides minimalistic workqueue-like interface for
users which need a dedicated worker thread (e.g. for realtime
priority).  It has basic queue, flush_work, flush_worker operations
which mostly match the workqueue counterparts; however, due to the way
flush_work() is implemented, it has a noticeable difference of not
allowing work items to be freed while being executed.

While the current users of kthread_worker are okay with the current
behavior, the restriction does impede some valid use cases.  Also,
removing this difference isn't difficult and actually makes the code
easier to understand.

This patch reimplements flush_kthread_work() such that it uses a
flush_work item instead of queue/done sequence numbers.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Colin Cross <ccross@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
include/linux/kthread.h
kernel/kthread.c