Commit 24c7fb85 authored by Chuck Lever's avatar Chuck Lever

NFSD: Add an nfsd4_read::rd_eof field

Refactor: Make the EOF result available in the entire NFSv4 READ
path.
Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent c738b218
...@@ -3879,7 +3879,6 @@ static __be32 nfsd4_encode_splice_read( ...@@ -3879,7 +3879,6 @@ static __be32 nfsd4_encode_splice_read(
struct xdr_stream *xdr = resp->xdr; struct xdr_stream *xdr = resp->xdr;
struct xdr_buf *buf = xdr->buf; struct xdr_buf *buf = xdr->buf;
int status, space_left; int status, space_left;
u32 eof;
__be32 nfserr; __be32 nfserr;
__be32 *p = xdr->p - 2; __be32 *p = xdr->p - 2;
...@@ -3888,7 +3887,8 @@ static __be32 nfsd4_encode_splice_read( ...@@ -3888,7 +3887,8 @@ static __be32 nfsd4_encode_splice_read(
return nfserr_resource; return nfserr_resource;
nfserr = nfsd_splice_read(read->rd_rqstp, read->rd_fhp, 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; read->rd_length = maxcount;
if (nfserr) if (nfserr)
goto out_err; goto out_err;
...@@ -3899,7 +3899,7 @@ static __be32 nfsd4_encode_splice_read( ...@@ -3899,7 +3899,7 @@ static __be32 nfsd4_encode_splice_read(
goto out_err; goto out_err;
} }
*(p++) = htonl(eof); *(p++) = htonl(read->rd_eof);
*(p++) = htonl(maxcount); *(p++) = htonl(maxcount);
buf->page_len = maxcount; buf->page_len = maxcount;
...@@ -3943,7 +3943,6 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp, ...@@ -3943,7 +3943,6 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp,
struct file *file, unsigned long maxcount) struct file *file, unsigned long maxcount)
{ {
struct xdr_stream *xdr = resp->xdr; struct xdr_stream *xdr = resp->xdr;
u32 eof;
int starting_len = xdr->buf->len - 8; int starting_len = xdr->buf->len - 8;
__be32 nfserr; __be32 nfserr;
__be32 tmp; __be32 tmp;
...@@ -3955,7 +3954,7 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp, ...@@ -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, nfserr = nfsd_readv(resp->rqstp, read->rd_fhp, file, read->rd_offset,
resp->rqstp->rq_vec, read->rd_vlen, &maxcount, resp->rqstp->rq_vec, read->rd_vlen, &maxcount,
&eof); &read->rd_eof);
read->rd_length = maxcount; read->rd_length = maxcount;
if (nfserr) if (nfserr)
return nfserr; return nfserr;
...@@ -3963,7 +3962,7 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp, ...@@ -3963,7 +3962,7 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp,
return nfserr_io; return nfserr_io;
xdr_truncate_encode(xdr, starting_len + 8 + xdr_align_size(maxcount)); 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); write_bytes_to_xdr_buf(xdr->buf, starting_len , &tmp, 4);
tmp = htonl(maxcount); tmp = htonl(maxcount);
write_bytes_to_xdr_buf(xdr->buf, starting_len + 4, &tmp, 4); write_bytes_to_xdr_buf(xdr->buf, starting_len + 4, &tmp, 4);
......
...@@ -302,9 +302,10 @@ struct nfsd4_read { ...@@ -302,9 +302,10 @@ struct nfsd4_read {
u32 rd_length; /* request */ u32 rd_length; /* request */
int rd_vlen; int rd_vlen;
struct nfsd_file *rd_nf; struct nfsd_file *rd_nf;
struct svc_rqst *rd_rqstp; /* response */ 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 { struct nfsd4_readdir {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment