NFSD: Fix bad checking of space for padding in splice read
authorKinglong Mee <kinglongmee@gmail.com>
Wed, 9 Jul 2014 13:51:27 +0000 (21:51 +0800)
committerJ. Bruce Fields <bfields@redhat.com>
Fri, 11 Jul 2014 19:19:25 +0000 (15:19 -0400)
Note that the caller has already reserved space for count and eof, so
xdr->p has already moved past them, only the padding remains.

Signed-off-by: Kinglong Mee <kinglongmee@gmail.com>
Fixes dc97618ddd (nfsd4: separate splice and readv cases)
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4xdr.c

index 1ad7bd4e346fc9d920663d7de572f7f5f8fb059b..01023a5951632326a42fdc352352bc12754527e6 100644 (file)
@@ -3072,11 +3072,8 @@ static __be32 nfsd4_encode_splice_read(
        __be32 nfserr;
        __be32 *p = xdr->p - 2;
 
-       /*
-        * Don't inline pages unless we know there's room for eof,
-        * count, and possible padding:
-        */
-       if (xdr->end - xdr->p < 3)
+       /* Make sure there will be room for padding if needed */
+       if (xdr->end - xdr->p < 1)
                return nfserr_resource;
 
        nfserr = nfsd_splice_read(read->rd_rqstp, file,