From: Al Viro Date: Sun, 27 Nov 2016 01:05:42 +0000 (-0500) Subject: fix default_file_splice_read() X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=8e54cadab447dae779f80f79c87cbeaea9594f60;p=openwrt%2Fstaging%2Fblogic.git 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 Tested-by: Alexei Starovoitov Signed-off-by: Al Viro --- 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) {