nfsd: move blocked lock handling under a dedicated spinlock
authorJeff Layton <jlayton@redhat.com>
Thu, 20 Oct 2016 13:34:31 +0000 (09:34 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Mon, 24 Oct 2016 20:51:21 +0000 (16:51 -0400)
commit0cc11a61b80a1ab1d12f1597b27b8b45ef8bac4a
tree391b3b25eb0ac4780c5498f76fef1927f59fe907
parent07d9a380680d1c0eb51ef87ff2eab5c994949e69
nfsd: move blocked lock handling under a dedicated spinlock

Bruce was hitting some lockdep warnings in testing, showing that we
could hit a deadlock with the new CB_NOTIFY_LOCK handling, involving a
rather complex situation involving four different spinlocks.

The crux of the matter is that we end up taking the nn->client_lock in
the lm_notify handler. The simplest fix is to just declare a new
per-nfsd_net spinlock to protect the new CB_NOTIFY_LOCK structures.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/netns.h
fs/nfsd/nfs4state.c