Commit ead8fb8c authored by Kinglong Mee's avatar Kinglong Mee Committed by J. Bruce Fields

NFSD: Set the attributes used to store the verifier for EXCLUSIVE4_1

According to rfc5661 18.16.4,
"If EXCLUSIVE4_1 was used, the client determines the attributes
 used for the verifier by comparing attrset with cva_attrs.attrmask;"

So, EXCLUSIVE4_1 also needs those bitmask used to store the verifier.
Signed-off-by: default avatarKinglong Mee <kinglongmee@gmail.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent 7d580722
...@@ -276,13 +276,13 @@ do_open_lookup(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, stru ...@@ -276,13 +276,13 @@ do_open_lookup(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, stru
nfsd4_security_inode_setsecctx(*resfh, &open->op_label, open->op_bmval); nfsd4_security_inode_setsecctx(*resfh, &open->op_label, open->op_bmval);
/* /*
* Following rfc 3530 14.2.16, use the returned bitmask * Following rfc 3530 14.2.16, and rfc 5661 18.16.4
* to indicate which attributes we used to store the * use the returned bitmask to indicate which attributes
* verifier: * we used to store the verifier:
*/ */
if (open->op_createmode == NFS4_CREATE_EXCLUSIVE && status == 0) if (nfsd_create_is_exclusive(open->op_createmode) && status == 0)
open->op_bmval[1] = (FATTR4_WORD1_TIME_ACCESS | open->op_bmval[1] |= (FATTR4_WORD1_TIME_ACCESS |
FATTR4_WORD1_TIME_MODIFY); FATTR4_WORD1_TIME_MODIFY);
} else } else
/* /*
* Note this may exit with the parent still locked. * Note this may exit with the parent still locked.
......
...@@ -1249,12 +1249,6 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp, ...@@ -1249,12 +1249,6 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,
#ifdef CONFIG_NFSD_V3 #ifdef CONFIG_NFSD_V3
static inline int nfsd_create_is_exclusive(int createmode)
{
return createmode == NFS3_CREATE_EXCLUSIVE
|| createmode == NFS4_CREATE_EXCLUSIVE4_1;
}
/* /*
* NFSv3 and NFSv4 version of nfsd_create * NFSv3 and NFSv4 version of nfsd_create
*/ */
......
...@@ -131,4 +131,10 @@ static inline __be32 fh_getattr(struct svc_fh *fh, struct kstat *stat) ...@@ -131,4 +131,10 @@ static inline __be32 fh_getattr(struct svc_fh *fh, struct kstat *stat)
return nfserrno(vfs_getattr(&p, stat)); return nfserrno(vfs_getattr(&p, stat));
} }
static inline int nfsd_create_is_exclusive(int createmode)
{
return createmode == NFS3_CREATE_EXCLUSIVE
|| createmode == NFS4_CREATE_EXCLUSIVE4_1;
}
#endif /* LINUX_NFSD_VFS_H */ #endif /* LINUX_NFSD_VFS_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment