]> git.karo-electronics.de Git - karo-tx-linux.git/commit
freezer: fix set_freezable[_with_signal]() race
authorTejun Heo <tj@kernel.org>
Thu, 3 Nov 2011 22:19:28 +0000 (15:19 -0700)
committerTejun Heo <tj@kernel.org>
Thu, 3 Nov 2011 22:19:28 +0000 (15:19 -0700)
commit5f005e299f00e034a6f0d8d30ab43a272a0a5cbc
tree91e3970c40e234c59ff43cddd187b85a858ed778
parent3b9b33e3a2997643efd6b3fc4e4ba7e80774d6dd
freezer: fix set_freezable[_with_signal]() race

A kthread doing set_freezable*() may race with on-going PM freeze and
the freezer might think all tasks are frozen while the new freezable
kthread is merrily proceeding to execute code paths which aren't
supposed to be executing during PM freeze.

Reimplement set_freezable[_with_signal]() using __set_freezable() such
that freezable PF flags are modified under freezer_lock and
try_to_freeze() is called afterwards.  This eliminates race condition
against freezing.

Note: Separated out from larger patch to resolve fix order dependency
      Oleg pointed out.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Oleg Nesterov <oleg@redhat.com>
include/linux/freezer.h
kernel/freezer.c