nfsd41: pass writable attrs mask to nfsd4_decode_fattr
In preparation for EXCLUSIVE4_1 Signed-off-by: Benny Halevy <bhalevy@panasas.com> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
This commit is contained in:
Родитель
f3ec22b5b0
Коммит
c0d6fc8a2d
|
@ -251,9 +251,14 @@ nfsd4_decode_bitmap(struct nfsd4_compoundargs *argp, u32 *bmval)
|
||||||
DECODE_TAIL;
|
DECODE_TAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u32 nfsd_attrmask[] = {
|
||||||
|
NFSD_WRITEABLE_ATTRS_WORD0,
|
||||||
|
NFSD_WRITEABLE_ATTRS_WORD1
|
||||||
|
};
|
||||||
|
|
||||||
static __be32
|
static __be32
|
||||||
nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, struct iattr *iattr,
|
nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, u32 *writable,
|
||||||
struct nfs4_acl **acl)
|
struct iattr *iattr, struct nfs4_acl **acl)
|
||||||
{
|
{
|
||||||
int expected_len, len = 0;
|
int expected_len, len = 0;
|
||||||
u32 dummy32;
|
u32 dummy32;
|
||||||
|
@ -271,7 +276,7 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, struct iattr *ia
|
||||||
*/
|
*/
|
||||||
if ((bmval[0] & ~NFSD_SUPPORTED_ATTRS_WORD0) || (bmval[1] & ~NFSD_SUPPORTED_ATTRS_WORD1))
|
if ((bmval[0] & ~NFSD_SUPPORTED_ATTRS_WORD0) || (bmval[1] & ~NFSD_SUPPORTED_ATTRS_WORD1))
|
||||||
return nfserr_attrnotsupp;
|
return nfserr_attrnotsupp;
|
||||||
if ((bmval[0] & ~NFSD_WRITEABLE_ATTRS_WORD0) || (bmval[1] & ~NFSD_WRITEABLE_ATTRS_WORD1))
|
if ((bmval[0] & ~writable[0]) || (bmval[1] & ~writable[1]))
|
||||||
return nfserr_inval;
|
return nfserr_inval;
|
||||||
|
|
||||||
READ_BUF(4);
|
READ_BUF(4);
|
||||||
|
@ -499,7 +504,9 @@ nfsd4_decode_create(struct nfsd4_compoundargs *argp, struct nfsd4_create *create
|
||||||
if ((status = check_filename(create->cr_name, create->cr_namelen, nfserr_inval)))
|
if ((status = check_filename(create->cr_name, create->cr_namelen, nfserr_inval)))
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
if ((status = nfsd4_decode_fattr(argp, create->cr_bmval, &create->cr_iattr, &create->cr_acl)))
|
status = nfsd4_decode_fattr(argp, create->cr_bmval, nfsd_attrmask,
|
||||||
|
&create->cr_iattr, &create->cr_acl);
|
||||||
|
if (status)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
DECODE_TAIL;
|
DECODE_TAIL;
|
||||||
|
@ -660,7 +667,9 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open)
|
||||||
switch (open->op_createmode) {
|
switch (open->op_createmode) {
|
||||||
case NFS4_CREATE_UNCHECKED:
|
case NFS4_CREATE_UNCHECKED:
|
||||||
case NFS4_CREATE_GUARDED:
|
case NFS4_CREATE_GUARDED:
|
||||||
if ((status = nfsd4_decode_fattr(argp, open->op_bmval, &open->op_iattr, &open->op_acl)))
|
status = nfsd4_decode_fattr(argp, open->op_bmval,
|
||||||
|
nfsd_attrmask, &open->op_iattr, &open->op_acl);
|
||||||
|
if (status)
|
||||||
goto out;
|
goto out;
|
||||||
break;
|
break;
|
||||||
case NFS4_CREATE_EXCLUSIVE:
|
case NFS4_CREATE_EXCLUSIVE:
|
||||||
|
@ -859,7 +868,7 @@ nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, struct nfsd4_setattr *seta
|
||||||
status = nfsd4_decode_stateid(argp, &setattr->sa_stateid);
|
status = nfsd4_decode_stateid(argp, &setattr->sa_stateid);
|
||||||
if (status)
|
if (status)
|
||||||
return status;
|
return status;
|
||||||
return nfsd4_decode_fattr(argp, setattr->sa_bmval,
|
return nfsd4_decode_fattr(argp, setattr->sa_bmval, nfsd_attrmask,
|
||||||
&setattr->sa_iattr, &setattr->sa_acl);
|
&setattr->sa_iattr, &setattr->sa_acl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче