summaryrefslogtreecommitdiffstats
path: root/fs/nfsd/nfs4xdr.c
diff options
context:
space:
mode:
authorJ. Bruce Fields2013-02-28 21:51:49 +0100
committerJ. Bruce Fields2013-04-03 17:47:53 +0200
commit9d313b17db965ae42137c5d4dd3063037544c4cd (patch)
treeeaf39419bb8dcf2775570aa14ca12552655a69f1 /fs/nfsd/nfs4xdr.c
parentnfsd4: remove BUG_ON (diff)
downloadkernel-qcow2-linux-9d313b17db965ae42137c5d4dd3063037544c4cd.tar.gz
kernel-qcow2-linux-9d313b17db965ae42137c5d4dd3063037544c4cd.tar.xz
kernel-qcow2-linux-9d313b17db965ae42137c5d4dd3063037544c4cd.zip
nfsd4: handle seqid-mutating open errors from xdr decoding
If a client sets an owner (or group_owner or acl) attribute on open for create, and the mapping of that owner to an id fails, then we return BAD_OWNER. But BAD_OWNER is a seqid-mutating error, so we can't shortcut the open processing that case: we have to at least look up the owner so we can find the seqid to bump. Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/nfs4xdr.c')
-rw-r--r--fs/nfsd/nfs4xdr.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index a2720071f282..229b3ac246e1 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -804,6 +804,7 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open)
open->op_iattr.ia_valid = 0;
open->op_openowner = NULL;
+ open->op_xdr_error = 0;
/* seqid, share_access, share_deny, clientid, ownerlen */
READ_BUF(4);
READ32(open->op_seqid);