NFSD: Add an nfsd4_read::rd_eof field
authorChuck Lever <chuck.lever@oracle.com>
Fri, 22 Jul 2022 20:08:57 +0000 (16:08 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Sat, 30 Jul 2022 00:16:57 +0000 (20:16 -0400)
Refactor: Make the EOF result available in the entire NFSv4 READ
path.

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

index c9468f2..16ae1be 100644 (file)
@@ -3879,7 +3879,6 @@ static __be32 nfsd4_encode_splice_read(
        struct xdr_stream *xdr = resp->xdr;
        struct xdr_buf *buf = xdr->buf;
        int status, space_left;
-       u32 eof;
        __be32 nfserr;
        __be32 *p = xdr->p - 2;
 
@@ -3888,7 +3887,8 @@ static __be32 nfsd4_encode_splice_read(
                return nfserr_resource;
 
        nfserr = nfsd_splice_read(read->rd_rqstp, read->rd_fhp,
-                                 file, read->rd_offset, &maxcount, &eof);
+                                 file, read->rd_offset, &maxcount,
+                                 &read->rd_eof);
        read->rd_length = maxcount;
        if (nfserr)
                goto out_err;
@@ -3899,7 +3899,7 @@ static __be32 nfsd4_encode_splice_read(
                goto out_err;
        }
 
-       *(p++) = htonl(eof);
+       *(p++) = htonl(read->rd_eof);
        *(p++) = htonl(maxcount);
 
        buf->page_len = maxcount;
@@ -3943,7 +3943,6 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp,
                                 struct file *file, unsigned long maxcount)
 {
        struct xdr_stream *xdr = resp->xdr;
-       u32 eof;
        int starting_len = xdr->buf->len - 8;
        __be32 nfserr;
        __be32 tmp;
@@ -3955,7 +3954,7 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp,
 
        nfserr = nfsd_readv(resp->rqstp, read->rd_fhp, file, read->rd_offset,
                            resp->rqstp->rq_vec, read->rd_vlen, &maxcount,
-                           &eof);
+                           &read->rd_eof);
        read->rd_length = maxcount;
        if (nfserr)
                return nfserr;
@@ -3963,7 +3962,7 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp,
                return nfserr_io;
        xdr_truncate_encode(xdr, starting_len + 8 + xdr_align_size(maxcount));
 
-       tmp = htonl(eof);
+       tmp = htonl(read->rd_eof);
        write_bytes_to_xdr_buf(xdr->buf, starting_len    , &tmp, 4);
        tmp = htonl(maxcount);
        write_bytes_to_xdr_buf(xdr->buf, starting_len + 4, &tmp, 4);
index 7b74401..6e6a890 100644 (file)
@@ -302,9 +302,10 @@ struct nfsd4_read {
        u32                     rd_length;          /* request */
        int                     rd_vlen;
        struct nfsd_file        *rd_nf;
-       
+
        struct svc_rqst         *rd_rqstp;          /* response */
-       struct svc_fh           *rd_fhp;             /* response */
+       struct svc_fh           *rd_fhp;            /* response */
+       u32                     rd_eof;             /* response */
 };
 
 struct nfsd4_readdir {