linux/fs/iomap
Jan Kara 6b65028e2b
iomap: Fix broken data integrity guarantees for O_SYNC writes
Commit d279c80e0b ("iomap: inline iomap_dio_bio_opflags()") has broken
the logic in iomap_dio_bio_iter() in a way that when the device does
support FUA (or has no writeback cache) and the direct IO happens to
freshly allocated or unwritten extents, we will *not* issue fsync after
completing direct IO O_SYNC / O_DSYNC write because the
IOMAP_DIO_WRITE_THROUGH flag stays mistakenly set. Fix the problem by
clearing IOMAP_DIO_WRITE_THROUGH whenever we do not perform FUA write as
it was originally intended.

CC: John Garry <john.g.garry@oracle.com>
CC: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
Fixes: d279c80e0b ("iomap: inline iomap_dio_bio_opflags()")
CC: stable@vger.kernel.org
Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/20250730102840.20470-2-jack@suse.cz
Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
Reviewed-by: John Garry <john.g.garry@oracle.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Christian Brauner <brauner@kernel.org>
2025-08-11 14:51:49 +02:00
..
buffered-io.c vfs-6.17-rc1.iomap 2025-07-28 16:09:03 -07:00
direct-io.c iomap: Fix broken data integrity guarantees for O_SYNC writes 2025-08-11 14:51:49 +02:00
fiemap.c iomap: header diet 2025-07-14 10:51:31 +02:00
internal.h iomap: move all ioend handling to ioend.c 2025-07-14 10:51:32 +02:00
ioend.c iomap: move all ioend handling to ioend.c 2025-07-14 10:51:32 +02:00
iter.c iomap: header diet 2025-07-14 10:51:31 +02:00
Makefile iomap: build the writeback code without CONFIG_BLOCK 2025-07-14 10:51:33 +02:00
seek.c iomap: header diet 2025-07-14 10:51:31 +02:00
swapfile.c iomap: header diet 2025-07-14 10:51:31 +02:00
trace.c iomap: header diet 2025-07-14 10:51:31 +02:00
trace.h iomap: rename iomap_writepage_map to iomap_writeback_folio 2025-07-14 10:51:32 +02:00