]> git.hungrycats.org Git - linux/commit
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:40:02 +0000 (10:40 -0700)
commit647aac2b3cc4016aeb62b0952e90065fdff595ea
tree50197c951d45d1f6631dfb116e2fe25afe461d65
parent164743c183e486910153252ab3429f4bbea994af
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