[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <175279461304.715479.1053791364664462528.stgit@frogsfrogsfrogs>
Date: Thu, 17 Jul 2025 16:43:17 -0700
From: "Darrick J. Wong" <djwong@...nel.org>
To: tytso@....edu
Cc: joannelkoong@...il.com, miklos@...redi.hu, John@...ves.net,
linux-fsdevel@...r.kernel.org, bernd@...ernd.com, linux-ext4@...r.kernel.org,
neal@...pa.dev
Subject: [PATCH 15/22] fuse2fs: disable most io channel flush/invalidate in
iomap pagecache mode
From: Darrick J. Wong <djwong@...nel.org>
Now that fuse2fs uses iomap for pagecache IO, all regular file IO goes
directly to the disk. There is no need to flush the unix IO manager's
disk cache (or invalidate it) because it does not contain file data.
Signed-off-by: "Darrick J. Wong" <djwong@...nel.org>
---
misc/fuse2fs.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/misc/fuse2fs.c b/misc/fuse2fs.c
index 989f9f17cae0a9..9604f06e69bc90 100644
--- a/misc/fuse2fs.c
+++ b/misc/fuse2fs.c
@@ -5295,9 +5295,11 @@ static int fuse2fs_iomap_begin_read(struct fuse2fs *ff, ext2_ino_t ino,
return -ENOSYS;
/* flush dirty io_channel buffers to disk before iomap reads them */
- err = io_channel_flush_tag(ff->fs->io, ino);
- if (err)
- return translate_error(ff->fs, ino, err);
+ if (!fuse2fs_iomap_does_fileio(ff)) {
+ err = io_channel_flush_tag(ff->fs->io, ino);
+ if (err)
+ return translate_error(ff->fs, ino, err);
+ }
if (inode->i_flags & EXT4_EXTENTS_FL)
return fuse2fs_iomap_begin_extent(ff, ino, inode, pos, count,
@@ -5393,9 +5395,11 @@ static int fuse2fs_iomap_begin_write(struct fuse2fs *ff, ext2_ino_t ino,
* flush and invalidate the file's io_channel buffers before iomap
* writes them
*/
- err = io_channel_invalidate_tag(ff->fs->io, ino);
- if (err)
- return translate_error(ff->fs, ino, err);
+ if (!fuse2fs_iomap_does_fileio(ff)) {
+ err = io_channel_invalidate_tag(ff->fs->io, ino);
+ if (err)
+ return translate_error(ff->fs, ino, err);
+ }
return 0;
}
@@ -5972,7 +5976,7 @@ static int op_iomap_ioend(const char *path, uint64_t nodeid, uint64_t attr_ino,
* flush and invalidate the file's io_channel buffers again now that
* iomap wrote them
*/
- if (written > 0) {
+ if (written > 0 && !fuse2fs_iomap_does_fileio(ff)) {
err = io_channel_invalidate_tag(ff->fs->io, attr_ino);
if (err) {
ret = translate_error(ff->fs, attr_ino, err);
Powered by blists - more mailing lists