take the guts of file-to-pipe splice into a helper function
[sfrench/cifs-2.6.git] / fs / splice.c
index c1ca2cc63b43fc525d7807163a5b2cb7ad2d74ea..74f968c65a9382011202acb781d311f3dfd4e34b 100644 (file)
@@ -1002,6 +1002,23 @@ static int splice_pipe_to_pipe(struct pipe_inode_info *ipipe,
                               struct pipe_inode_info *opipe,
                               size_t len, unsigned int flags);
 
+static long splice_file_to_pipe(struct file *in,
+                        struct pipe_inode_info *opipe,
+                        loff_t *offset,
+                        size_t len, unsigned int flags)
+{
+       long ret;
+
+       pipe_lock(opipe);
+       ret = wait_for_space(opipe, flags);
+       if (!ret)
+               ret = do_splice_to(in, offset, opipe, len, flags);
+       pipe_unlock(opipe);
+       if (ret > 0)
+               wakeup_pipe_readers(opipe);
+       return ret;
+}
+
 /*
  * Determine where to splice to/from.
  */
@@ -1081,13 +1098,7 @@ long do_splice(struct file *in, loff_t *off_in, struct file *out,
                if (out->f_flags & O_NONBLOCK)
                        flags |= SPLICE_F_NONBLOCK;
 
-               pipe_lock(opipe);
-               ret = wait_for_space(opipe, flags);
-               if (!ret)
-                       ret = do_splice_to(in, &offset, opipe, len, flags);
-               pipe_unlock(opipe);
-               if (ret > 0)
-                       wakeup_pipe_readers(opipe);
+               ret = splice_file_to_pipe(in, opipe, &offset, len, flags);
                if (!off_in)
                        in->f_pos = offset;
                else