mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-09-22 09:34:56 +02:00
NFSD: pass nfsd_file to nfsd_iter_read()
[ Upstream commit803bc849f0] Prepare for nfsd_iter_read() to use the DIO alignment stored in nfsd_file by passing the nfsd_file to nfsd_iter_read() rather than just the file which is associaed with the nfsd_file. This means nfsd4_encode_readv() now also needs the nfsd_file rather than the file. Instead of changing the file arg to be the nfsd_file, we discard the file arg as the nfsd_file (and indeed the file) is already available via the "read" argument. Signed-off-by: Mike Snitzer <snitzer@kernel.org> Reviewed-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: NeilBrown <neil@brown.name> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Stable-dep-of:18c1cc6988("SUNRPC: Return an error from xdr_buf_to_bvec() on overflow") Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
4fee43759b
commit
43ffd230b9
+4
-4
@@ -4096,7 +4096,7 @@ out_err:
|
||||
|
||||
static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp,
|
||||
struct nfsd4_read *read,
|
||||
struct file *file, unsigned long maxcount)
|
||||
unsigned long maxcount)
|
||||
{
|
||||
struct xdr_stream *xdr = resp->xdr;
|
||||
unsigned int base = xdr->buf->page_len & ~PAGE_MASK;
|
||||
@@ -4107,7 +4107,7 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp,
|
||||
if (xdr_reserve_space_vec(xdr, maxcount) < 0)
|
||||
return nfserr_resource;
|
||||
|
||||
nfserr = nfsd_iter_read(resp->rqstp, read->rd_fhp, file,
|
||||
nfserr = nfsd_iter_read(resp->rqstp, read->rd_fhp, read->rd_nf,
|
||||
read->rd_offset, &maxcount, base,
|
||||
&read->rd_eof);
|
||||
read->rd_length = maxcount;
|
||||
@@ -4155,7 +4155,7 @@ nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr,
|
||||
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);
|
||||
nfserr = nfsd4_encode_readv(resp, read, maxcount);
|
||||
if (nfserr) {
|
||||
xdr_truncate_encode(xdr, starting_len);
|
||||
return nfserr;
|
||||
@@ -4906,7 +4906,7 @@ nfsd4_encode_read_plus_data(struct nfsd4_compoundres *resp,
|
||||
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);
|
||||
nfserr = nfsd4_encode_readv(resp, read, maxcount);
|
||||
if (nfserr)
|
||||
return nfserr;
|
||||
|
||||
|
||||
+4
-3
@@ -1061,7 +1061,7 @@ __be32 nfsd_splice_read(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
||||
* nfsd_iter_read - Perform a VFS read using an iterator
|
||||
* @rqstp: RPC transaction context
|
||||
* @fhp: file handle of file to be read
|
||||
* @file: opened struct file of file to be read
|
||||
* @nf: opened struct nfsd_file of file to be read
|
||||
* @offset: starting byte offset
|
||||
* @count: IN: requested number of bytes; OUT: number of bytes read
|
||||
* @base: offset in first page of read buffer
|
||||
@@ -1074,9 +1074,10 @@ __be32 nfsd_splice_read(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
||||
* returned.
|
||||
*/
|
||||
__be32 nfsd_iter_read(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
||||
struct file *file, loff_t offset, unsigned long *count,
|
||||
struct nfsd_file *nf, loff_t offset, unsigned long *count,
|
||||
unsigned int base, u32 *eof)
|
||||
{
|
||||
struct file *file = nf->nf_file;
|
||||
unsigned long v, total;
|
||||
struct iov_iter iter;
|
||||
loff_t ppos = offset;
|
||||
@@ -1258,7 +1259,7 @@ __be32 nfsd_read(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
||||
if (file->f_op->splice_read && test_bit(RQ_SPLICE_OK, &rqstp->rq_flags))
|
||||
err = nfsd_splice_read(rqstp, fhp, file, offset, count, eof);
|
||||
else
|
||||
err = nfsd_iter_read(rqstp, fhp, file, offset, count, 0, eof);
|
||||
err = nfsd_iter_read(rqstp, fhp, nf, offset, count, 0, eof);
|
||||
|
||||
nfsd_file_put(nf);
|
||||
trace_nfsd_read_done(rqstp, fhp, offset, *count);
|
||||
|
||||
+1
-1
@@ -120,7 +120,7 @@ __be32 nfsd_splice_read(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
||||
unsigned long *count,
|
||||
u32 *eof);
|
||||
__be32 nfsd_iter_read(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
||||
struct file *file, loff_t offset,
|
||||
struct nfsd_file *nf, loff_t offset,
|
||||
unsigned long *count, unsigned int base,
|
||||
u32 *eof);
|
||||
__be32 nfsd_read(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
||||
|
||||
Reference in New Issue
Block a user