[PATCH] f2fs: fix O_DIRECT cleanup range for append writes

Seongjae Jeong <[email protected]>
Newsgroups gmane.linux.kernel,gmane.linux.file-systems.f2fs
Message-ID <[email protected]>
When an O_DIRECT write falls back to buffered I/O,
f2fs_flush_buffered_write() uses orig_pos to flush and invalidate
the page cache.

For O_APPEND writes, f2fs_write_checks() updates iocb->ki_pos to
the end of the file after orig_pos has been saved. As a result,
the cleanup range can differ from the actual buffered write range.

Save the write position after f2fs_write_checks() and use it for
the forced buffered I/O cleanup.

Fixes: 92318f20d703 ("f2fs: preserve direct write semantics when buffering is forced")
Signed-off-by: Seongjae Jeong <[email protected]>
---
 fs/f2fs/file.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index b99d9cdf9ba7..bf61545603e5 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -5313,6 +5313,7 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
 	const loff_t pos = iocb->ki_pos;
 	const ssize_t count = iov_iter_count(from);
 	ssize_t ret;
+	loff_t bufio_start_pos;
 
 	if (unlikely(f2fs_cp_error(F2FS_I_SB(inode)))) {
 		ret = -EIO;
@@ -5343,6 +5344,8 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
 	if (ret <= 0)
 		goto out_unlock;
 
+	bufio_start_pos = iocb->ki_pos;
+
 	/* Determine whether we will do a direct write or a buffered write. */
 	dio = f2fs_should_use_dio(inode, iocb, from);
 
@@ -5396,8 +5399,8 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
 	 */
 	if (ret > 0 && !dio && (iocb->ki_flags & IOCB_DIRECT))
 		f2fs_flush_buffered_write(iocb->ki_filp->f_mapping,
-					  orig_pos,
-					  orig_pos + ret - 1);
+					  bufio_start_pos,
+					  bufio_start_pos + ret - 1);
 
 	return ret;
 }
-- 
2.53.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.