From: Trond Myklebust Date: Fri, 11 Dec 2020 17:26:15 +0000 (-0500) Subject: nfsd: Don't set eof on a truncated READ_PLUS X-Git-Tag: v5.10.17~642 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6533681890902e3b59bbceaea311760b3791c28d;p=platform%2Fkernel%2Flinux-rpi.git nfsd: Don't set eof on a truncated READ_PLUS [ Upstream commit b68f0cbd3f95f2df81e525c310a41fc73c2ed0d3 ] If the READ_PLUS operation was truncated due to an error, then ensure we clear the 'eof' flag. Fixes: 9f0b5792f07d ("NFSD: Encode a full READ_PLUS reply") Signed-off-by: Trond Myklebust Signed-off-by: Chuck Lever Signed-off-by: Sasha Levin --- diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 26f6e277..5f5169b 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -4736,14 +4736,15 @@ out: if (nfserr && segments == 0) xdr_truncate_encode(xdr, starting_len); 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) { xdr_truncate_encode(xdr, last_segment); 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;