summaryrefslogtreecommitdiff
path: root/fs/nfs
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@primarydata.com>2015-02-26 20:54:46 +0300
committerZefan Li <lizefan@huawei.com>2015-06-19 06:40:20 +0300
commitdeee5f87a9f1f8d1d99fd6d0d30b56ac5aa839ad (patch)
treea4d9e25925048608301120ed11227c7a97d99d4a /fs/nfs
parentc7ef03ccf7dfaea06e75ef68c7b021f95ad2868b (diff)
downloadlinux-deee5f87a9f1f8d1d99fd6d0d30b56ac5aa839ad.tar.xz
NFSv4: Don't call put_rpccred() under the rcu_read_lock()
commit 7c0af9ffb7bb4e5355470fa60b3eb711ddf226fa upstream. put_rpccred() can sleep. Fixes: 8f649c3762547 ("NFSv4: Fix the locking in nfs_inode_reclaim_delegation()") Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com> [lizf: Backported to 3.4: adjust context] Signed-off-by: Zefan Li <lizefan@huawei.com>
Diffstat (limited to 'fs/nfs')
-rw-r--r--fs/nfs/delegation.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c
index 16d16e56cc39..62261deb0569 100644
--- a/fs/nfs/delegation.c
+++ b/fs/nfs/delegation.c
@@ -148,8 +148,8 @@ void nfs_inode_reclaim_delegation(struct inode *inode, struct rpc_cred *cred,
&delegation->flags);
NFS_I(inode)->delegation_state = delegation->type;
spin_unlock(&delegation->lock);
- put_rpccred(oldcred);
rcu_read_unlock();
+ put_rpccred(oldcred);
} else {
/* We appear to have raced with a delegation return. */
spin_unlock(&delegation->lock);