generic_file_splice_read() does so little that it makes no sense to keep
__generic_file_splice_read() a separate function.

Signed-off-by: Miklos Szeredi <[email protected]>
---
 fs/splice.c | 70 +++++++++++++++++++++++++------------------------------------
 1 file changed, 29 insertions(+), 41 deletions(-)

diff --git a/fs/splice.c b/fs/splice.c
index bee282803ccf..395cbb6b4926 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -260,17 +260,30 @@ void splice_shrink_spd(struct splice_pipe_desc *spd)
        kfree(spd->partial);
 }
 
-static int
-__generic_file_splice_read(struct file *in, loff_t *ppos,
-                          struct pipe_inode_info *pipe, size_t len,
-                          unsigned int flags)
+/**
+ * generic_file_splice_read - splice data from file to a pipe
+ * @in:                file to splice from
+ * @ppos:      position in @in
+ * @pipe:      pipe to splice to
+ * @len:       number of bytes to splice
+ * @flags:     splice modifier flags
+ *
+ * Description:
+ *    Will read pages from given file and fill them into a pipe. Can be
+ *    used as long as the address_space operations for the source implements
+ *    a readpage() hook.
+ *
+ */
+ssize_t generic_file_splice_read(struct file *in, loff_t *ppos,
+                                struct pipe_inode_info *pipe, size_t len,
+                                unsigned int flags)
 {
        unsigned int loff, nr_pages, req_pages;
        struct page *pages[PIPE_DEF_BUFFERS];
        struct partial_page partial[PIPE_DEF_BUFFERS];
        struct page *page;
        pgoff_t index;
-       int error;
+       int ret = 0;
        struct splice_pipe_desc spd = {
                .pages = pages,
                .partial = partial,
@@ -280,6 +293,9 @@ __generic_file_splice_read(struct file *in, loff_t *ppos,
                .spd_release = spd_release_page,
        };
 
+       if (IS_DAX(in->f_mapping->host))
+               return default_file_splice_read(in, ppos, pipe, len, flags);
+
        if (splice_grow_spd(pipe, &spd))
                return -ENOMEM;
 
@@ -288,62 +304,34 @@ __generic_file_splice_read(struct file *in, loff_t *ppos,
        req_pages = (len + loff + PAGE_SIZE - 1) >> PAGE_SHIFT;
        nr_pages = min(req_pages, spd.nr_pages_max);
 
-       error = 0;
        while (spd.nr_pages < nr_pages && len) {
-               long ret;
+               int nr;
 
-               ret = get_page_for_read(in, loff, len, index, &page);
-               if (ret <= 0) {
-                       error = ret;
+               nr = get_page_for_read(in, loff, len, index, &page);
+               if (nr <= 0) {
+                       ret = nr;
                        break;
                }
 
                spd.pages[spd.nr_pages] = page;
                spd.partial[spd.nr_pages].offset = loff;
-               spd.partial[spd.nr_pages].len = ret;
+               spd.partial[spd.nr_pages].len = nr;
                spd.nr_pages++;
                index++;
-               len -= ret;
+               len -= nr;
                loff = 0;
        }
 
        in->f_ra.prev_pos = (loff_t)index << PAGE_SHIFT;
 
        if (spd.nr_pages)
-               error = splice_to_pipe(pipe, &spd);
-
-       splice_shrink_spd(&spd);
-       return error;
-}
-
-/**
- * generic_file_splice_read - splice data from file to a pipe
- * @in:                file to splice from
- * @ppos:      position in @in
- * @pipe:      pipe to splice to
- * @len:       number of bytes to splice
- * @flags:     splice modifier flags
- *
- * Description:
- *    Will read pages from given file and fill them into a pipe. Can be
- *    used as long as the address_space operations for the source implements
- *    a readpage() hook.
- *
- */
-ssize_t generic_file_splice_read(struct file *in, loff_t *ppos,
-                                struct pipe_inode_info *pipe, size_t len,
-                                unsigned int flags)
-{
-       int ret;
-
-       if (IS_DAX(in->f_mapping->host))
-               return default_file_splice_read(in, ppos, pipe, len, flags);
+               ret = splice_to_pipe(pipe, &spd);
 
-       ret = __generic_file_splice_read(in, ppos, pipe, len, flags);
        if (ret > 0) {
                *ppos += ret;
                file_accessed(in);
        }
+       splice_shrink_spd(&spd);
 
        return ret;
 }
-- 
2.5.5

Reply via email to