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)
committerTejun Heo <tj@kernel.org>
Sun, 22 Jul 2012 17:15:28 +0000 (10:15 -0700)
commit46f3d976213452350f9d10b0c2780c2681f7075b
tree1a8e0b20c306f84b07eedc97c07308be65a060ce
parent9a2e03d8ed518a61154f18d83d6466628e519f94
kthread_worker: reimplement flush_kthread_work() to allow freeing the work item being executed

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>
include/linux/kthread.h
kernel/kthread.c