summaryrefslogtreecommitdiffstats
path: root/fs
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 /fs
parentf05c124a70a4953a66acbd6d6c601ea1eb5d0fa7 (diff)
downloadlinux-stable-fa332941c0c7c00e3420078268b7558d0ef792b5.tar.gz
linux-stable-fa332941c0c7c00e3420078268b7558d0ef792b5.tar.bz2
linux-stable-fa332941c0c7c00e3420078268b7558d0ef792b5.zip
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>
Diffstat (limited to 'fs')
-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)
/* Save the delegation */
nfs4_stateid_copy(&stateid, &delegation->stateid);
rcu_read_unlock();
+ nfs_release_seqid(opendata->o_arg.seqid);
ret = nfs_may_open(state->inode, state->owner->so_cred, open_mode);
if (ret != 0)
goto out;