diff options
author | Eric Biggers <ebiggers@google.com> | 2017-05-24 18:05:29 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2017-05-24 18:05:29 -0400 |
commit | e5465795cac48233c9b606a7a419f4190a91851e (patch) | |
tree | 94f07f19cf0f86b5586989863069468862873708 /fs | |
parent | 624327f8794704c5066b11a52f9da6a09dce7f9a (diff) | |
download | op-kernel-dev-e5465795cac48233c9b606a7a419f4190a91851e.zip op-kernel-dev-e5465795cac48233c9b606a7a419f4190a91851e.tar.gz |
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: 16c54688592c ("ext4: Allow parallel DIO reads")
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ext4/inode.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 7cd99de..90b2649 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -3713,7 +3713,7 @@ static ssize_t ext4_direct_IO_read(struct kiocb *iocb, struct iov_iter *iter) */ inode_lock_shared(inode); ret = filemap_write_and_wait_range(mapping, iocb->ki_pos, - iocb->ki_pos + count); + iocb->ki_pos + count - 1); if (ret) goto out_unlock; ret = __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev, |