splice: move inode size check into generic_file_splice_read()
authorJens Axboe <jens.axboe@oracle.com>
Fri, 1 Jun 2007 12:54:11 +0000 (14:54 +0200)
committerJens Axboe <jens.axboe@oracle.com>
Fri, 8 Jun 2007 06:32:38 +0000 (08:32 +0200)
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
fs/splice.c

index 12f28281d2b1e1f8d1627995f03efcfeb25a4945..228a48799d11c35400355111c9b698aed10f3124 100644 (file)
@@ -478,10 +478,18 @@ ssize_t generic_file_splice_read(struct file *in, loff_t *ppos,
 {
        ssize_t spliced;
        int ret;
+       loff_t isize, left;
+
+       isize = i_size_read(in->f_mapping->host);
+       if (unlikely(*ppos >= isize))
+               return 0;
+
+       left = isize - *ppos;
+       if (unlikely(left < len))
+               len = left;
 
        ret = 0;
        spliced = 0;
-
        while (len) {
                ret = __generic_file_splice_read(in, ppos, pipe, len, flags);
 
@@ -922,7 +930,6 @@ static long do_splice_to(struct file *in, loff_t *ppos,
                         struct pipe_inode_info *pipe, size_t len,
                         unsigned int flags)
 {
-       loff_t isize, left;
        int ret;
 
        if (unlikely(!in->f_op || !in->f_op->splice_read))
@@ -935,14 +942,6 @@ static long do_splice_to(struct file *in, loff_t *ppos,
        if (unlikely(ret < 0))
                return ret;
 
-       isize = i_size_read(in->f_mapping->host);
-       if (unlikely(*ppos >= isize))
-               return 0;
-       
-       left = isize - *ppos;
-       if (unlikely(left < len))
-               len = left;
-
        return in->f_op->splice_read(in, ppos, pipe, len, flags);
 }