summaryrefslogtreecommitdiffstats
path: root/fs/splice.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2016-11-26 20:05:42 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2016-11-26 20:05:42 -0500
commit8e54cadab447dae779f80f79c87cbeaea9594f60 (patch)
treef4b4b68d40369757544c9000349bbb0ec5de38e7 /fs/splice.c
parent3ad0e83cf86bcaeb6ca3c37060a3ce866b25fb42 (diff)
downloadlinux-stable-8e54cadab447dae779f80f79c87cbeaea9594f60.tar.gz
linux-stable-8e54cadab447dae779f80f79c87cbeaea9594f60.tar.bz2
linux-stable-8e54cadab447dae779f80f79c87cbeaea9594f60.zip
fix default_file_splice_read()
Botched calculation of number of pages. As the result, we were dropping pieces when doing splice to pipe from e.g. 9p. Reported-by: Alexei Starovoitov <ast@kernel.org> Tested-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/splice.c')
-rw-r--r--fs/splice.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/splice.c b/fs/splice.c
index dcaf185a5731..5a7750bd2eea 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -408,7 +408,8 @@ static ssize_t default_file_splice_read(struct file *in, loff_t *ppos,
if (res <= 0)
return -ENOMEM;
- nr_pages = res / PAGE_SIZE;
+ BUG_ON(dummy);
+ nr_pages = DIV_ROUND_UP(res, PAGE_SIZE);
vec = __vec;
if (nr_pages > PIPE_DEF_BUFFERS) {