summaryrefslogtreecommitdiffstats
path: root/fs/nfsd
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@redhat.com>2018-02-15 21:29:15 +0100
committerJ. Bruce Fields <bfields@redhat.com>2018-03-20 22:51:10 +0100
commitb8232d3315ec746e3b5d4c9252541567e57a509b (patch)
tree0c77d08d40df7720311225bf90df3d769b859263 /fs/nfsd
parentsvcrdma: Clean up rdma_build_arg_xdr (diff)
downloadlinux-b8232d3315ec746e3b5d4c9252541567e57a509b.tar.xz
linux-b8232d3315ec746e3b5d4c9252541567e57a509b.zip
nfsd: simplify put of fi_deleg_file
fi_delegees is basically just a reference count on users of fi_deleg_file, which is cleared when fi_delegees goes to zero. The fi_deleg_file check here is redundant. Also add an assertion to make sure we don't have unbalanced puts. Signed-off-by: J. Bruce Fields <bfields@redhat.com> Reviewed-by: Jeff Layton <jlayton@kernel.org>
Diffstat (limited to 'fs/nfsd')
-rw-r--r--fs/nfsd/nfs4state.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 16efbe2b1853..9072d0f8340b 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -879,9 +879,12 @@ static void nfs4_put_deleg_lease(struct nfs4_file *fp)
{
struct file *filp = NULL;
+ WARN_ON_ONCE(!fp->fi_delegees);
+
spin_lock(&fp->fi_lock);
- if (fp->fi_deleg_file && --fp->fi_delegees == 0)
+ if (--fp->fi_delegees == 0) {
swap(filp, fp->fi_deleg_file);
+ }
spin_unlock(&fp->fi_lock);
if (filp) {