Commit 345995fa authored by Al Viro's avatar Al Viro

vmsplice_to_user(): switch to import_iovec()

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent d4fb392f
...@@ -1533,34 +1533,29 @@ static long vmsplice_to_user(struct file *file, const struct iovec __user *uiov, ...@@ -1533,34 +1533,29 @@ static long vmsplice_to_user(struct file *file, const struct iovec __user *uiov,
struct iovec iovstack[UIO_FASTIOV]; struct iovec iovstack[UIO_FASTIOV];
struct iovec *iov = iovstack; struct iovec *iov = iovstack;
struct iov_iter iter; struct iov_iter iter;
ssize_t count;
pipe = get_pipe_info(file); pipe = get_pipe_info(file);
if (!pipe) if (!pipe)
return -EBADF; return -EBADF;
ret = rw_copy_check_uvector(READ, uiov, nr_segs, ret = import_iovec(READ, uiov, nr_segs,
ARRAY_SIZE(iovstack), iovstack, &iov); ARRAY_SIZE(iovstack), &iov, &iter);
if (ret <= 0) if (ret < 0)
goto out; return ret;
count = ret;
iov_iter_init(&iter, READ, iov, nr_segs, count);
sd.total_len = iov_iter_count(&iter);
sd.len = 0; sd.len = 0;
sd.total_len = count;
sd.flags = flags; sd.flags = flags;
sd.u.data = &iter; sd.u.data = &iter;
sd.pos = 0; sd.pos = 0;
if (sd.total_len) {
pipe_lock(pipe); pipe_lock(pipe);
ret = __splice_from_pipe(pipe, &sd, pipe_to_user); ret = __splice_from_pipe(pipe, &sd, pipe_to_user);
pipe_unlock(pipe); pipe_unlock(pipe);
}
out:
if (iov != iovstack)
kfree(iov); kfree(iov);
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment