nfsd41: CREATE_EXCLUSIVE4_1
Implement the CREATE_EXCLUSIVE4_1 open mode conforming to http://tools.ietf.org/html/draft-ietf-nfsv4-minorversion1-26 This mode allows the client to atomically create a file if it doesn't exist while setting some of its attributes. It must be implemented if the server supports persistent reply cache and/or pnfs. Signed-off-by: Benny Halevy <bhalevy@panasas.com> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
This commit is contained in:

committed by
J. Bruce Fields

parent
8c18f2052e
commit
79fb54abd2
@@ -260,6 +260,12 @@ static u32 nfsd_attrmask[] = {
|
||||
NFSD_WRITEABLE_ATTRS_WORD2
|
||||
};
|
||||
|
||||
static u32 nfsd41_ex_attrmask[] = {
|
||||
NFSD_SUPPATTR_EXCLCREAT_WORD0,
|
||||
NFSD_SUPPATTR_EXCLCREAT_WORD1,
|
||||
NFSD_SUPPATTR_EXCLCREAT_WORD2
|
||||
};
|
||||
|
||||
static __be32
|
||||
nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, u32 *writable,
|
||||
struct iattr *iattr, struct nfs4_acl **acl)
|
||||
@@ -684,6 +690,17 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open)
|
||||
READ_BUF(8);
|
||||
COPYMEM(open->op_verf.data, 8);
|
||||
break;
|
||||
case NFS4_CREATE_EXCLUSIVE4_1:
|
||||
if (argp->minorversion < 1)
|
||||
goto xdr_error;
|
||||
READ_BUF(8);
|
||||
COPYMEM(open->op_verf.data, 8);
|
||||
status = nfsd4_decode_fattr(argp, open->op_bmval,
|
||||
nfsd41_ex_attrmask, &open->op_iattr,
|
||||
&open->op_acl);
|
||||
if (status)
|
||||
goto out;
|
||||
break;
|
||||
default:
|
||||
goto xdr_error;
|
||||
}
|
||||
|
Reference in New Issue
Block a user