summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2025-01-10 08:37:34 +0100
committerJens Axboe <axboe@kernel.dk>2025-01-10 07:31:50 -0700
commit09ccf5549d7809671af34774bb30c8f935d6ed2b (patch)
treec3224ee0cca9c1032b735c237027880f1550380b
parent781fc49a0e5c111b1a210bd1b3499c89bb21cd81 (diff)
loop: only write back pagecache when starting to to use direct I/O
There is no point in doing an fdatasync to write out pages when switching away from direct I/O, as there won't be any. The writeback is only needed when switching to direct I/O, which would have to invalidate the pagecache less efficiently from the I/O path. Signed-off-by: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/20250110073750.1582447-5-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--drivers/block/loop.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 55bea9c95b45..cf80cdf5e440 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -203,8 +203,9 @@ static void __loop_update_dio(struct loop_device *lo, bool dio)
if (lo->use_dio == use_dio)
return;
- /* flush dirty pages before changing direct IO */
- vfs_fsync(lo->lo_backing_file, 0);
+ /* flush dirty pages before starting to use direct I/O */
+ if (use_dio)
+ vfs_fsync(lo->lo_backing_file, 0);
/*
* The flag of LO_FLAGS_DIRECT_IO is handled similarly with