]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
NFSv4: Fix races between nfs_remove_bad_delegation() and delegation return
authorTrond Myklebust <trond.myklebust@primarydata.com>
Mon, 10 Nov 2014 23:43:56 +0000 (18:43 -0500)
committerJiri Slaby <jslaby@suse.cz>
Wed, 19 Nov 2014 17:38:23 +0000 (18:38 +0100)
commit1f093632c55db7d63da16f158ed86be8836a40c4
tree4a76fd6c27818d810215dba215559a005e2971a9
parent77683fa6ccecf2eb8b4dd34fe609455580dfe766
NFSv4: Fix races between nfs_remove_bad_delegation() and delegation return

commit 869f9dfa4d6d57b79e0afc3af14772c2a023eeb1 upstream.

Any attempt to call nfs_remove_bad_delegation() while a delegation is being
returned is currently a no-op. This means that we can end up looping
forever in nfs_end_delegation_return() if something causes the delegation
to be revoked.
This patch adds a mechanism whereby the state recovery code can communicate
to the delegation return code that the delegation is no longer valid and
that it should not be used when reclaiming state.
It also changes the return value for nfs4_handle_delegation_recall_error()
to ensure that nfs_end_delegation_return() does not reattempt the lock
reclaim before state recovery is done.

http://lkml.kernel.org/r/CAN-5tyHwG=Cn2Q9KsHWadewjpTTy_K26ee+UnSvHvG4192p-Xw@mail.gmail.com
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
fs/nfs/delegation.c
fs/nfs/delegation.h
fs/nfs/nfs4proc.c