diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index cbfc19faf10dcf1bc2661838994ec1d9177c26a6..5a82fff11651f9bc1b67718dd218022718bd2f75 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -3847,6 +3847,11 @@ static ssize_t ext4_direct_IO_read(struct kiocb *iocb, struct iov_iter *iter) int unlocked = 0; struct inode *inode = iocb->ki_filp->f_mapping->host; ssize_t ret; + loff_t offset = iocb->ki_pos; + loff_t size = i_size_read(inode); + + if (offset >= size) + return 0; if (ext4_should_dioread_nolock(inode)) { /*