-From jiangying8582@126.com Wed Aug 5 16:29:58 2020
+From jiangying8582@126.com Thu Aug 6 12:24:48 2020
From: Jiang Ying <jiangying8582@126.com>
-Date: Wed, 5 Aug 2020 15:57:21 +0800
-Subject: ext4: fix direct I/O read error
-To: tytso@mit.edu, adilger.kernel@dilger.ca, linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org
-Cc: wanglong19@meituan.com, heguanjun@meituan.com, jack@suse.cz
-Message-ID: <1596614241-178185-1-git-send-email-jiangying8582@126.com>
+Date: Thu, 6 Aug 2020 17:38:11 +0800
+Subject: ext4: fix direct I/O read error for kernel stable rc4.4
+To: tytso@mit.edu, adilger.kernel@dilger.ca, linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org, jack@suse.cz, stable@vger.kernel.org
+Cc: wanglong19@meituan.com, heguanjun@meituan.com
+Message-ID: <1596706691-82760-1-git-send-email-jiangying8582@126.com>
From: Jiang Ying <jiangying8582@126.com>
Fixes: 9fe55eea7e4b ("Fix race when checking i_size on direct i/o read")
Reviewed-by: Jan Kara <jack@suse.cz>
-Co-developed-by: Wang Long <wanglong19@meituan.com>
-Signed-off-by: Wang Long <wanglong19@meituan.com>
+Reviewed-by: Wang Long <wanglong19@meituan.com>
Signed-off-by: Jiang Ying <jiangying8582@126.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
- fs/ext4/inode.c | 5 +++++
- 1 file changed, 5 insertions(+)
+ fs/ext4/inode.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
-@@ -3352,6 +3352,11 @@ static ssize_t ext4_direct_IO(struct kio
- struct inode *inode = file->f_mapping->host;
+@@ -3353,6 +3353,13 @@ static ssize_t ext4_direct_IO(struct kio
size_t count = iov_iter_count(iter);
ssize_t ret;
-+ loff_t offset = iocb->ki_pos;
-+ loff_t size = i_size_read(inode);
-+
-+ if (offset >= size)
-+ return 0;
++ if (iov_iter_rw(iter) == READ) {
++ loff_t size = i_size_read(inode);
++
++ if (offset >= size)
++ return 0;
++ }
++
#ifdef CONFIG_EXT4_FS_ENCRYPTION
if (ext4_encrypted_inode(inode) && S_ISREG(inode->i_mode))
+ return 0;