]> Pileus Git - ~andy/linux/commitdiff
lift sb_start_write out of ->splice_write()
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 20 Mar 2013 17:21:32 +0000 (13:21 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 9 Apr 2013 18:12:57 +0000 (14:12 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/splice.c

index 17d7323bc2c50414b823fc4c5d9bd8b980a5c919..7efc2f5057fbd3b05f998f118b498750522d0616 100644 (file)
@@ -1000,8 +1000,6 @@ generic_file_splice_write(struct pipe_inode_info *pipe, struct file *out,
        };
        ssize_t ret;
 
-       sb_start_write(inode->i_sb);
-
        pipe_lock(pipe);
 
        splice_from_pipe_begin(&sd);
@@ -1037,7 +1035,6 @@ generic_file_splice_write(struct pipe_inode_info *pipe, struct file *out,
                        *ppos += ret;
                balance_dirty_pages_ratelimited(mapping);
        }
-       sb_end_write(inode->i_sb);
 
        return ret;
 }
@@ -1064,9 +1061,7 @@ static ssize_t default_file_splice_write(struct pipe_inode_info *pipe,
 {
        ssize_t ret;
 
-       file_start_write(out);
        ret = splice_from_pipe(pipe, out, ppos, len, flags, write_pipe_buf);
-       file_end_write(out);
        if (ret > 0)
                *ppos += ret;
 
@@ -1119,7 +1114,10 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
        else
                splice_write = default_file_splice_write;
 
-       return splice_write(pipe, out, ppos, len, flags);
+       file_start_write(out);
+       ret = splice_write(pipe, out, ppos, len, flags);
+       file_end_write(out);
+       return ret;
 }
 
 /*