diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2013-04-09 18:56:52 +0200 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2013-04-09 19:19:35 +0200 |
commit | fa332941c0c7c00e3420078268b7558d0ef792b5 (patch) | |
tree | d1063f53f5b19de2575c9007df4054773098f411 /fs/nfs | |
parent | SUNRPC: Fix a potential memory leak in rpc_new_client (diff) | |
download | linux-fa332941c0c7c00e3420078268b7558d0ef792b5.tar.xz linux-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/nfs')
-rw-r--r-- | fs/nfs/nfs4proc.c | 1 |
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; |