]> git.baikalelectronics.ru Git - kernel.git/commit
freezer: add unsafe versions of freezable helpers for NFS
authorColin Cross <ccross@android.com>
Mon, 6 May 2013 23:50:06 +0000 (23:50 +0000)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Sun, 12 May 2013 12:16:21 +0000 (14:16 +0200)
commitb405a888916219ab6bf1fd03e6294ec17481b0ae
tree393d8c261cf9b79c18197d3173e0b8aa8874ca35
parent8d558d708ac7028555343d7c77c3fa7aa5714f99
freezer: add unsafe versions of freezable helpers for NFS

NFS calls the freezable helpers with locks held, which is unsafe
and will cause lockdep warnings when f15d1d5 "lockdep: check
that no locks held at freeze time" is reapplied (it was reverted
in e238ef1).  NFS shouldn't be doing this, but it has
long-running syscalls that must hold a lock but also shouldn't
block suspend.  Until NFS freeze handling is rewritten to use a
signal to exit out of the critical section, add new *_unsafe
versions of the helpers that will not run the lockdep test when
f15d1d5 is reapplied, and call them from NFS.

In practice the likley result of holding the lock while freezing
is that a second task blocked on the lock will never freeze,
aborting suspend, but it is possible to manufacture a case using
the cgroup freezer, the lock, and the suspend freezer to create
a deadlock.  Silencing the lockdep warning here will allow
problems to be found in other drivers that may have a more
serious deadlock risk, and prevent new problems from being added.

Signed-off-by: Colin Cross <ccross@android.com>
Acked-by: Pavel Machek <pavel@ucw.cz>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
fs/nfs/inode.c
fs/nfs/nfs3proc.c
fs/nfs/nfs4proc.c
include/linux/freezer.h
net/sunrpc/sched.c