diff options
author | Trond Myklebust <trond.myklebust@primarydata.com> | 2016-09-22 20:39:16 +0300 |
---|---|---|
committer | Anna Schumaker <Anna.Schumaker@Netapp.com> | 2016-09-27 21:35:11 +0300 |
commit | b134fc4a533300402514154fcb0a661ddf106dd9 (patch) | |
tree | a87f84b9bf884d2e14030f791d3f879fea43051f /fs/nfs/nfs4proc.c | |
parent | 272289a3df7297fd798a8ddf652c6d29f675de28 (diff) | |
download | linux-b134fc4a533300402514154fcb0a661ddf106dd9.tar.xz |
NFSv4: Don't test open_stateid unless it is set
We need to test the NFS_OPEN_STATE flag for whether or not the
open_stateid is valid.
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Tested-by: Oleg Drokin <green@linuxhacker.ru>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r-- | fs/nfs/nfs4proc.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 409b9fa2b844..6f0df2c8846c 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -2587,6 +2587,11 @@ static int nfs41_check_open_stateid(struct nfs4_state *state) struct rpc_cred *cred = state->owner->so_cred; int status; + if (test_bit(NFS_OPEN_STATE, &state->flags) == 0) { + if (test_bit(NFS_DELEGATED_STATE, &state->flags) == 0) + return NFS_OK; + return -NFS4ERR_BAD_STATEID; + } /* If a state reset has been done, test_stateid is unneeded */ if ((test_bit(NFS_O_RDONLY_STATE, &state->flags) == 0) && (test_bit(NFS_O_WRONLY_STATE, &state->flags) == 0) && |