Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b6d2f1ca authored by J. Bruce Fields's avatar J. Bruce Fields
Browse files

nfsd4: more robust ignoring of WANT bits in OPEN



Mask out the WANT bits right at the start instead of on each use.

Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent a084daf5
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -315,6 +315,9 @@ nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
	if (open->op_create && open->op_claim_type != NFS4_OPEN_CLAIM_NULL)
		return nfserr_inval;

	/* We don't yet support WANT bits: */
	open->op_share_access &= NFS4_SHARE_ACCESS_MASK;

	/*
	 * RFC5661 18.51.3
	 * Before RECLAIM_COMPLETE done, server should deny new lock
+2 −3
Original line number Diff line number Diff line
@@ -2345,8 +2345,7 @@ static inline __be32 init_open_stateid(struct nfs4_ol_stateid *stp, struct nfs4_
	stp->st_file = fp;
	stp->st_access_bmap = 0;
	stp->st_deny_bmap = 0;
	__set_bit(open->op_share_access & ~NFS4_SHARE_WANT_MASK,
		  &stp->st_access_bmap);
	__set_bit(open->op_share_access, &stp->st_access_bmap);
	__set_bit(open->op_share_deny, &stp->st_deny_bmap);
	stp->st_openstp = NULL;
	return nfs_ok;
@@ -2690,7 +2689,7 @@ nfsd4_truncate(struct svc_rqst *rqstp, struct svc_fh *fh,
static __be32
nfs4_upgrade_open(struct svc_rqst *rqstp, struct nfs4_file *fp, struct svc_fh *cur_fh, struct nfs4_ol_stateid *stp, struct nfsd4_open *open)
{
	u32 op_share_access = open->op_share_access & ~NFS4_SHARE_WANT_MASK;
	u32 op_share_access = open->op_share_access;
	bool new_access;
	__be32 status;