]> git.baikalelectronics.ru Git - kernel.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)
committerTrond Myklebust <trond.myklebust@primarydata.com>
Wed, 12 Nov 2014 22:19:04 +0000 (17:19 -0500)
commit277ef18b07a342e9c23bc2e246fe7dad1fc5e4b3
tree48adcdfacd4ac26a9faf36b8d31f9d2ed9f1217c
parent233fcb3304fd723e929b0746b9310d6e8a20fa09
NFSv4: Fix races between nfs_remove_bad_delegation() and delegation return

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
Cc: stable@vger.kernel.org
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
fs/nfs/delegation.c
fs/nfs/delegation.h
fs/nfs/nfs4proc.c