mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-04-11 07:48:08 +07:00
splice: lift checks from do_splice_from() into callers
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
68d70d03f8
commit
18c67cb9f0
31
fs/splice.c
31
fs/splice.c
@ -1098,17 +1098,6 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
|
|||||||
{
|
{
|
||||||
ssize_t (*splice_write)(struct pipe_inode_info *, struct file *,
|
ssize_t (*splice_write)(struct pipe_inode_info *, struct file *,
|
||||||
loff_t *, size_t, unsigned int);
|
loff_t *, size_t, unsigned int);
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (unlikely(!(out->f_mode & FMODE_WRITE)))
|
|
||||||
return -EBADF;
|
|
||||||
|
|
||||||
if (unlikely(out->f_flags & O_APPEND))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
ret = rw_verify_area(WRITE, out, ppos, len);
|
|
||||||
if (unlikely(ret < 0))
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
if (out->f_op && out->f_op->splice_write)
|
if (out->f_op && out->f_op->splice_write)
|
||||||
splice_write = out->f_op->splice_write;
|
splice_write = out->f_op->splice_write;
|
||||||
@ -1303,6 +1292,16 @@ long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
|
|||||||
};
|
};
|
||||||
long ret;
|
long ret;
|
||||||
|
|
||||||
|
if (unlikely(!(out->f_mode & FMODE_WRITE)))
|
||||||
|
return -EBADF;
|
||||||
|
|
||||||
|
if (unlikely(out->f_flags & O_APPEND))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
ret = rw_verify_area(WRITE, out, opos, len);
|
||||||
|
if (unlikely(ret < 0))
|
||||||
|
return ret;
|
||||||
|
|
||||||
ret = splice_direct_to_actor(in, &sd, direct_splice_actor);
|
ret = splice_direct_to_actor(in, &sd, direct_splice_actor);
|
||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
*ppos = sd.pos;
|
*ppos = sd.pos;
|
||||||
@ -1358,6 +1357,16 @@ static long do_splice(struct file *in, loff_t __user *off_in,
|
|||||||
offset = out->f_pos;
|
offset = out->f_pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (unlikely(!(out->f_mode & FMODE_WRITE)))
|
||||||
|
return -EBADF;
|
||||||
|
|
||||||
|
if (unlikely(out->f_flags & O_APPEND))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
ret = rw_verify_area(WRITE, out, &offset, len);
|
||||||
|
if (unlikely(ret < 0))
|
||||||
|
return ret;
|
||||||
|
|
||||||
file_start_write(out);
|
file_start_write(out);
|
||||||
ret = do_splice_from(ipipe, out, &offset, len, flags);
|
ret = do_splice_from(ipipe, out, &offset, len, flags);
|
||||||
file_end_write(out);
|
file_end_write(out);
|
||||||
|
Loading…
Reference in New Issue
Block a user