Commit e5465795 authored by Eric Biggers's avatar Eric Biggers Committed by Theodore Ts'o

ext4: fix off-by-one error when writing back pages before dio read

The 'lend' argument of filemap_write_and_wait_range() is inclusive, so
we need to subtract 1 from pos + count.

Note that 'count' is guaranteed to be nonzero since
ext4_file_read_iter() returns early when given a 0 count.

Fixes: 16c54688 ("ext4: Allow parallel DIO reads")
Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
Reviewed-by: default avatarJan Kara <jack@suse.cz>
parent 624327f8
...@@ -3713,7 +3713,7 @@ static ssize_t ext4_direct_IO_read(struct kiocb *iocb, struct iov_iter *iter) ...@@ -3713,7 +3713,7 @@ static ssize_t ext4_direct_IO_read(struct kiocb *iocb, struct iov_iter *iter)
*/ */
inode_lock_shared(inode); inode_lock_shared(inode);
ret = filemap_write_and_wait_range(mapping, iocb->ki_pos, ret = filemap_write_and_wait_range(mapping, iocb->ki_pos,
iocb->ki_pos + count); iocb->ki_pos + count - 1);
if (ret) if (ret)
goto out_unlock; goto out_unlock;
ret = __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev, ret = __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev,
......
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