nfsd4: more robust ignoring of WANT bits in OPEN
authorJ. Bruce Fields <bfields@redhat.com>
Mon, 10 Oct 2011 21:44:19 +0000 (17:44 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Tue, 11 Oct 2011 16:15:15 +0000 (12:15 -0400)
Mask out the WANT bits right at the start instead of on each use.

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4proc.c
fs/nfsd/nfs4state.c

index 4e41f65c7021b91254c9734cdf32464709ce54df..5b192a2512b69e4056c9a5f4e97436b091cebad9 100644 (file)
@@ -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
index 5f35f35a2da0ca3e8e0ba8f3199af3201863a7e7..2042805da960a7912aad151d95c09935c037995d 100644 (file)
@@ -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;