]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
NFSD: Use vfs_iocb_iter_read()
authorChuck Lever <chuck.lever@oracle.com>
Fri, 13 Jun 2025 20:08:46 +0000 (16:08 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 14 Jul 2025 16:46:45 +0000 (12:46 -0400)
Refactor: Enable the use of IOCB flags to control NFSD's individual
read operations (when not using splice). This allows the eventual
use of atomic, uncached, direct, or asynchronous reads.

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

index cd689df2ca5d7396cffb5ed9dc14f774a8f3881c..3e21599294fe149a5e03364d5d597d9bbc238640 100644 (file)
@@ -1086,10 +1086,13 @@ __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 kiocb kiocb;
        ssize_t host_err;
        size_t len;
 
+       init_sync_kiocb(&kiocb, file);
+       kiocb.ki_pos = offset;
+
        v = 0;
        total = *count;
        while (total) {
@@ -1104,7 +1107,7 @@ __be32 nfsd_iter_read(struct svc_rqst *rqstp, struct svc_fh *fhp,
 
        trace_nfsd_read_vector(rqstp, fhp, offset, *count);
        iov_iter_bvec(&iter, ITER_DEST, rqstp->rq_bvec, v, *count);
-       host_err = vfs_iter_read(file, &iter, &ppos, 0);
+       host_err = vfs_iocb_iter_read(file, &kiocb, &iter);
        return nfsd_finish_read(rqstp, fhp, file, offset, count, eof, host_err);
 }