Commit 37fe6f1b authored by Chuck Lever's avatar Chuck Lever
Browse files

NFSD: Use vfs_iocb_iter_read()



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: default avatarChristoph Hellwig <hch@infradead.org>
Reviewed-by: default avatarNeilBrown <neil@brown.name>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent 61df439a
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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);
}