Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1483101
| From | Miklos Szeredi <mszeredi@redhat.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 11/11] splice: fold __generic_file_splice_read() into caller |
| Date | 2016-09-14 10:40 +0200 |
| Message-ID | <shdTA-6Z2-29@gated-at.bofh.it> (permalink) |
| References | <shdTz-6Z2-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
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 <mszeredi@redhat.com>
---
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
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 00/11] splice cleanups Miklos Szeredi <mszeredi@redhat.com> - 2016-09-14 10:40 +0200
[PATCH 09/11] splice: use get_page_for_read() Miklos Szeredi <mszeredi@redhat.com> - 2016-09-14 10:40 +0200
[PATCH 10/11] splice: don't check i_size in generic_file_splice_read() Miklos Szeredi <mszeredi@redhat.com> - 2016-09-14 10:40 +0200
[PATCH 11/11] splice: fold __generic_file_splice_read() into caller Miklos Szeredi <mszeredi@redhat.com> - 2016-09-14 10:40 +0200
[PATCH 07/11] pipe: remove generic_pipe_buf_confirm() Miklos Szeredi <mszeredi@redhat.com> - 2016-09-14 10:40 +0200
Re: [PATCH 07/11] pipe: remove generic_pipe_buf_confirm() Christoph Hellwig <hch@infradead.org> - 2016-09-16 13:30 +0200
[PATCH 01/11] pipe: add pipe_buf_get() helper Miklos Szeredi <mszeredi@redhat.com> - 2016-09-14 10:50 +0200
[PATCH 02/11] pipe: add pipe_buf_release() helper Miklos Szeredi <mszeredi@redhat.com> - 2016-09-14 10:50 +0200
[PATCH 04/11] pipe: add pipe_buf_steal() helper Miklos Szeredi <mszeredi@redhat.com> - 2016-09-14 10:50 +0200
Re: [PATCH 00/11] splice cleanups Cedric Blancher <cedric.blancher@gmail.com> - 2016-09-14 11:00 +0200
Re: [PATCH 00/11] splice cleanups Miklos Szeredi <mszeredi@redhat.com> - 2016-09-14 11:40 +0200
Re: [PATCH 00/11] splice cleanups Christoph Hellwig <hch@infradead.org> - 2016-09-16 13:30 +0200
csiph-web