summaryrefslogtreecommitdiffstats
path: root/fs/nfs
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2019-10-21 20:11:00 +0200
committerTrond Myklebust <trond.myklebust@hammerspace.com>2019-11-04 03:28:45 +0100
commite0f07896affd27ec378857dd6fccad0a43e52d35 (patch)
tree3c599da9f8cb6100d391da209cf6d8ab7617e232 /fs/nfs
parentNFSv4: Don't remove the delegation from the super_list more than once (diff)
downloadlinux-e0f07896affd27ec378857dd6fccad0a43e52d35.tar.xz
linux-e0f07896affd27ec378857dd6fccad0a43e52d35.zip
NFSv4: Hold the delegation spinlock when updating the seqid
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Diffstat (limited to 'fs/nfs')
-rw-r--r--fs/nfs/delegation.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c
index e80419a63fb5..7ebeb57cb597 100644
--- a/fs/nfs/delegation.c
+++ b/fs/nfs/delegation.c
@@ -387,8 +387,10 @@ int nfs_inode_set_delegation(struct inode *inode, const struct cred *cred,
/* Is this an update of the existing delegation? */
if (nfs4_stateid_match_other(&old_delegation->stateid,
&delegation->stateid)) {
+ spin_lock(&old_delegation->lock);
nfs_update_inplace_delegation(old_delegation,
delegation);
+ spin_unlock(&old_delegation->lock);
goto out;
}
/*