]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
NFSD: Use rqstp->rq_bvec in nfsd_iter_read()
authorChuck Lever <chuck.lever@oracle.com>
Tue, 6 May 2025 18:33:11 +0000 (14:33 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Thu, 15 May 2025 20:16:23 +0000 (16:16 -0400)
If we can get rid of all uses of rq_vec, then it can be removed.
Replace one use of rqstp::rq_vec with rqstp::rq_bvec.

Suggested-by: Christoph Hellwig <hch@infradead.org>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/vfs.c

index d0dfd97de4d3ee1e0a5f55422814e2d01013735f..7cfd26dec5a8ac6ff2a9a6fe30f4d052e946ad79 100644 (file)
@@ -1085,23 +1085,23 @@ __be32 nfsd_iter_read(struct svc_rqst *rqstp, struct svc_fh *fhp,
        unsigned long v, total;
        struct iov_iter iter;
        loff_t ppos = offset;
-       struct page *page;
        ssize_t host_err;
+       size_t len;
 
        v = 0;
        total = *count;
        while (total) {
-               page = *(rqstp->rq_next_page++);
-               rqstp->rq_vec[v].iov_base = page_address(page) + base;
-               rqstp->rq_vec[v].iov_len = min_t(size_t, total, PAGE_SIZE - base);
-               total -= rqstp->rq_vec[v].iov_len;
+               len = min_t(size_t, total, PAGE_SIZE - base);
+               bvec_set_page(&rqstp->rq_bvec[v], *(rqstp->rq_next_page++),
+                             len, base);
+               total -= len;
                ++v;
                base = 0;
        }
-       WARN_ON_ONCE(v > ARRAY_SIZE(rqstp->rq_vec));
+       WARN_ON_ONCE(v > rqstp->rq_maxpages);
 
        trace_nfsd_read_vector(rqstp, fhp, offset, *count);
-       iov_iter_kvec(&iter, ITER_DEST, rqstp->rq_vec, v, *count);
+       iov_iter_bvec(&iter, ITER_DEST, rqstp->rq_bvec, v, *count);
        host_err = vfs_iter_read(file, &iter, &ppos, 0);
        return nfsd_finish_read(rqstp, fhp, file, offset, count, eof, host_err);
 }