Commit b68f0cbd authored by Trond Myklebust's avatar Trond Myklebust Committed by Chuck Lever

nfsd: Don't set eof on a truncated READ_PLUS

If the READ_PLUS operation was truncated due to an error, then ensure we
clear the 'eof' flag.

Fixes: 9f0b5792 ("NFSD: Encode a full READ_PLUS reply")
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent 72d78717
...@@ -4860,14 +4860,15 @@ nfsd4_encode_read_plus(struct nfsd4_compoundres *resp, __be32 nfserr, ...@@ -4860,14 +4860,15 @@ nfsd4_encode_read_plus(struct nfsd4_compoundres *resp, __be32 nfserr,
if (nfserr && segments == 0) if (nfserr && segments == 0)
xdr_truncate_encode(xdr, starting_len); xdr_truncate_encode(xdr, starting_len);
else { else {
tmp = htonl(eof);
write_bytes_to_xdr_buf(xdr->buf, starting_len, &tmp, 4);
tmp = htonl(segments);
write_bytes_to_xdr_buf(xdr->buf, starting_len + 4, &tmp, 4);
if (nfserr) { if (nfserr) {
xdr_truncate_encode(xdr, last_segment); xdr_truncate_encode(xdr, last_segment);
nfserr = nfs_ok; nfserr = nfs_ok;
eof = 0;
} }
tmp = htonl(eof);
write_bytes_to_xdr_buf(xdr->buf, starting_len, &tmp, 4);
tmp = htonl(segments);
write_bytes_to_xdr_buf(xdr->buf, starting_len + 4, &tmp, 4);
} }
return nfserr; return nfserr;
......
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