]> git.karo-electronics.de Git - karo-tx-linux.git/commit
freezer: implement and use kthread_freezable_should_stop()
authorTejun Heo <tj@kernel.org>
Mon, 31 Oct 2011 22:30:30 +0000 (15:30 -0700)
committerTejun Heo <tj@kernel.org>
Mon, 31 Oct 2011 22:30:30 +0000 (15:30 -0700)
commite4a9d71c3157c1fe1c9f9187b91a25170c31b81f
tree20df1ad3efff778c1eb2e9c8a8ec9f7a485a6858
parent41520e9a8c1a3c5c2df69aeaede269649067cf97
freezer: implement and use kthread_freezable_should_stop()

Writeback and thinkpad_acpi have been using thaw_process() to prevent
deadlock between the freezer and kthread_stop(); unfortunately, this
is inherently racy - nothing prevents freezing from happening between
thaw_process() and kthread_stop().

This patch implements kthread_freezable_should_stop() which enters
refrigerator if necessary but is guaranteed to return if
kthread_stop() is invoked.  Both thaw_process() users are converted to
use the new function.

Note that this deadlock condition exists for many of freezable
kthreads.  They need to be converted to use the new should_stop or
freezable workqueue.

Tested with synthetic test case.

Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Henrique de Moraes Holschuh <ibm-acpi@hmh.eng.br>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Oleg Nesterov <oleg@redhat.com>
drivers/platform/x86/thinkpad_acpi.c
fs/fs-writeback.c
include/linux/freezer.h
include/linux/kthread.h
kernel/freezer.c
kernel/kthread.c
mm/backing-dev.c