aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2013-04-09 12:56:52 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2013-04-09 13:19:35 -0400
commitfa332941c0c7c00e3420078268b7558d0ef792b5 (patch)
treed1063f53f5b19de2575c9007df4054773098f411
parentf05c124a70a4953a66acbd6d6c601ea1eb5d0fa7 (diff)
NFSv4: Fix another potential state manager deadlock
Don't hold the NFSv4 sequence id while we check for open permission. The call to ACCESS may block due to reboot recovery. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r--fs/nfs/nfs4proc.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 26431cf62ddb..0ad025eb523b 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -1046,6 +1046,7 @@ static struct nfs4_state *nfs4_try_open_cached(struct nfs4_opendata *opendata)
1046 /* Save the delegation */ 1046 /* Save the delegation */
1047 nfs4_stateid_copy(&stateid, &delegation->stateid); 1047 nfs4_stateid_copy(&stateid, &delegation->stateid);
1048 rcu_read_unlock(); 1048 rcu_read_unlock();
1049 nfs_release_seqid(opendata->o_arg.seqid);
1049 ret = nfs_may_open(state->inode, state->owner->so_cred, open_mode); 1050 ret = nfs_may_open(state->inode, state->owner->so_cred, open_mode);
1050 if (ret != 0) 1051 if (ret != 0)
1051 goto out; 1052 goto out;