Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
[linux-2.6-block.git] / fs / nfsd / nfs4xdr.c
index aa87954b4af28afb4dfe5d696a42ab30338a3009..9df898ba648f73a14b1e42be47dbfddf189ec0a6 100644 (file)
@@ -3365,6 +3365,7 @@ static __be32 nfsd4_encode_splice_read(
        struct xdr_stream *xdr = &resp->xdr;
        struct xdr_buf *buf = xdr->buf;
        u32 eof;
+       long len;
        int space_left;
        __be32 nfserr;
        __be32 *p = xdr->p - 2;
@@ -3373,6 +3374,7 @@ static __be32 nfsd4_encode_splice_read(
        if (xdr->end - xdr->p < 1)
                return nfserr_resource;
 
+       len = maxcount;
        nfserr = nfsd_splice_read(read->rd_rqstp, file,
                                  read->rd_offset, &maxcount);
        if (nfserr) {
@@ -3385,8 +3387,8 @@ static __be32 nfsd4_encode_splice_read(
                return nfserr;
        }
 
-       eof = (read->rd_offset + maxcount >=
-              d_inode(read->rd_fhp->fh_dentry)->i_size);
+       eof = nfsd_eof_on_read(len, maxcount, read->rd_offset,
+                               d_inode(read->rd_fhp->fh_dentry)->i_size);
 
        *(p++) = htonl(eof);
        *(p++) = htonl(maxcount);
@@ -3456,14 +3458,15 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp,
        }
        read->rd_vlen = v;
 
+       len = maxcount;
        nfserr = nfsd_readv(file, read->rd_offset, resp->rqstp->rq_vec,
                        read->rd_vlen, &maxcount);
        if (nfserr)
                return nfserr;
        xdr_truncate_encode(xdr, starting_len + 8 + ((maxcount+3)&~3));
 
-       eof = (read->rd_offset + maxcount >=
-              d_inode(read->rd_fhp->fh_dentry)->i_size);
+       eof = nfsd_eof_on_read(len, maxcount, read->rd_offset,
+                               d_inode(read->rd_fhp->fh_dentry)->i_size);
 
        tmp = htonl(eof);
        write_bytes_to_xdr_buf(xdr->buf, starting_len    , &tmp, 4);