NFSD: Clean up SPLICE_OK in nfsd4_encode_read()
authorChuck Lever <chuck.lever@oracle.com>
Fri, 22 Jul 2022 20:08:51 +0000 (16:08 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Sat, 30 Jul 2022 00:16:57 +0000 (20:16 -0400)
Do the test_bit() once -- this reduces the number of locked-bus
operations and makes the function a little easier to read.

Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/nfs4xdr.c

index e590236a60ab1f1508657ce55d44a66d00daa3e1..c9468f205dadb7a304eba47f70b58fc12ce02401 100644 (file)
@@ -3980,6 +3980,7 @@ static __be32
 nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr,
                  struct nfsd4_read *read)
 {
+       bool splice_ok = test_bit(RQ_SPLICE_OK, &resp->rqstp->rq_flags);
        unsigned long maxcount;
        struct xdr_stream *xdr = resp->xdr;
        struct file *file;
@@ -3992,11 +3993,10 @@ nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr,
 
        p = xdr_reserve_space(xdr, 8); /* eof flag and byte count */
        if (!p) {
-               WARN_ON_ONCE(test_bit(RQ_SPLICE_OK, &resp->rqstp->rq_flags));
+               WARN_ON_ONCE(splice_ok);
                return nfserr_resource;
        }
-       if (resp->xdr->buf->page_len &&
-           test_bit(RQ_SPLICE_OK, &resp->rqstp->rq_flags)) {
+       if (resp->xdr->buf->page_len && splice_ok) {
                WARN_ON_ONCE(1);
                return nfserr_resource;
        }
@@ -4005,8 +4005,7 @@ nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr,
        maxcount = min_t(unsigned long, read->rd_length,
                         (xdr->buf->buflen - xdr->buf->len));
 
-       if (file->f_op->splice_read &&
-           test_bit(RQ_SPLICE_OK, &resp->rqstp->rq_flags))
+       if (file->f_op->splice_read && splice_ok)
                nfserr = nfsd4_encode_splice_read(resp, read, file, maxcount);
        else
                nfserr = nfsd4_encode_readv(resp, read, file, maxcount);