forked from luck/tmp_suning_uos_patched
splice: remove detritus from generic_file_splice_read()
i_size check is a leftover from the horrors that used to play with the page cache in that function. With the switch to ->read_iter(), it's neither needed nor correct - for gfs2 it ends up being buggy, since i_size is not guaranteed to be correct until later (inside ->read_iter()). Spotted-by: Abhi Das <adas@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
6d6d36bc6e
commit
e519e77747
|
@ -299,13 +299,8 @@ ssize_t generic_file_splice_read(struct file *in, loff_t *ppos,
|
||||||
{
|
{
|
||||||
struct iov_iter to;
|
struct iov_iter to;
|
||||||
struct kiocb kiocb;
|
struct kiocb kiocb;
|
||||||
loff_t isize;
|
|
||||||
int idx, ret;
|
int idx, ret;
|
||||||
|
|
||||||
isize = i_size_read(in->f_mapping->host);
|
|
||||||
if (unlikely(*ppos >= isize))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
iov_iter_pipe(&to, ITER_PIPE | READ, pipe, len);
|
iov_iter_pipe(&to, ITER_PIPE | READ, pipe, len);
|
||||||
idx = to.idx;
|
idx = to.idx;
|
||||||
init_sync_kiocb(&kiocb, in);
|
init_sync_kiocb(&kiocb, in);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user