From: Taotao Chen <chentaotao@xxxxxxxxxxxxxx> Set FOP_DONTCACHE in ext4_file_operations to declare support for uncached buffered I/O. To handle this flag, add processing for IOCB_DONTCACHE in ext4_write_begin() and ext4_da_write_begin() by passing FGP_DONTCACHE to page cache lookups. Part of a series refactoring address_space_operations write_begin and write_end callbacks to use struct kiocb for passing write context and flags. Signed-off-by: Taotao Chen <chentaotao@xxxxxxxxxxxxxx> --- fs/ext4/file.c | 3 ++- fs/ext4/inode.c | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/fs/ext4/file.c b/fs/ext4/file.c index 21df81347147..274b41a476c8 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c @@ -977,7 +977,8 @@ const struct file_operations ext4_file_operations = { .splice_write = iter_file_splice_write, .fallocate = ext4_fallocate, .fop_flags = FOP_MMAP_SYNC | FOP_BUFFER_RASYNC | - FOP_DIO_PARALLEL_WRITE, + FOP_DIO_PARALLEL_WRITE | + FOP_DONTCACHE, }; const struct inode_operations ext4_file_inode_operations = { diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 08c10200d6fe..639e2e231c4b 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -1270,6 +1270,9 @@ static int ext4_write_begin(const struct kiocb *iocb, if (unlikely(ret)) return ret; + if (iocb->ki_flags & IOCB_DONTCACHE) + fgp |= FGP_DONTCACHE; + trace_ext4_write_begin(inode, pos, len); /* * Reserve one block more for addition to orphan list in case @@ -3068,6 +3071,9 @@ static int ext4_da_write_begin(const struct kiocb *iocb, return 0; } + if (iocb->ki_flags & IOCB_DONTCACHE) + fgp |= FGP_DONTCACHE; + retry: fgp |= fgf_set_order(len); folio = __filemap_get_folio(mapping, index, fgp, -- 2.34.1