forked from Minki/linux
NFSD: Add an nfsd4_read::rd_eof field
Refactor: Make the EOF result available in the entire NFSv4 READ path. Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
parent
c738b218a2
commit
24c7fb8549
@ -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(
|
|||||||
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(
|
|||||||
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,
|
|||||||
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,
|
|||||||
|
|
||||||
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,
|
|||||||
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 {
|
|||||||
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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user