summaryrefslogtreecommitdiffstats
path: root/fs/splice.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2015-03-21 19:17:55 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2015-04-11 22:27:11 -0400
commit345995fa48c599210fd339a768eb68dead430b79 (patch)
tree034674831786260d143cdab27acf1934329cfbbf /fs/splice.c
parentd4fb392f4c5e57197a43b729e6fad5e02e5acaca (diff)
vmsplice_to_user(): switch to import_iovec()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/splice.c')
-rw-r--r--fs/splice.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/fs/splice.c b/fs/splice.c
index 4bbfa95b5bfe..41cbb16299e0 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -1533,34 +1533,29 @@ static long vmsplice_to_user(struct file *file, const struct iovec __user *uiov,
1533 struct iovec iovstack[UIO_FASTIOV]; 1533 struct iovec iovstack[UIO_FASTIOV];
1534 struct iovec *iov = iovstack; 1534 struct iovec *iov = iovstack;
1535 struct iov_iter iter; 1535 struct iov_iter iter;
1536 ssize_t count;
1537 1536
1538 pipe = get_pipe_info(file); 1537 pipe = get_pipe_info(file);
1539 if (!pipe) 1538 if (!pipe)
1540 return -EBADF; 1539 return -EBADF;
1541 1540
1542 ret = rw_copy_check_uvector(READ, uiov, nr_segs, 1541 ret = import_iovec(READ, uiov, nr_segs,
1543 ARRAY_SIZE(iovstack), iovstack, &iov); 1542 ARRAY_SIZE(iovstack), &iov, &iter);
1544 if (ret <= 0) 1543 if (ret < 0)
1545 goto out; 1544 return ret;
1546
1547 count = ret;
1548 iov_iter_init(&iter, READ, iov, nr_segs, count);
1549 1545
1546 sd.total_len = iov_iter_count(&iter);
1550 sd.len = 0; 1547 sd.len = 0;
1551 sd.total_len = count;
1552 sd.flags = flags; 1548 sd.flags = flags;
1553 sd.u.data = &iter; 1549 sd.u.data = &iter;
1554 sd.pos = 0; 1550 sd.pos = 0;
1555 1551
1556 pipe_lock(pipe); 1552 if (sd.total_len) {
1557 ret = __splice_from_pipe(pipe, &sd, pipe_to_user); 1553 pipe_lock(pipe);
1558 pipe_unlock(pipe); 1554 ret = __splice_from_pipe(pipe, &sd, pipe_to_user);
1559 1555 pipe_unlock(pipe);
1560out: 1556 }
1561 if (iov != iovstack)
1562 kfree(iov);
1563 1557
1558 kfree(iov);
1564 return ret; 1559 return ret;
1565} 1560}
1566 1561