Jan Kara <jack@xxxxxxx> writes: > Commit d279c80e0bac ("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@xxxxxxxxxx> > CC: "Ritesh Harjani (IBM)" <ritesh.list@xxxxxxxxx> > Fixes: d279c80e0bac ("iomap: inline iomap_dio_bio_opflags()") > CC: stable@xxxxxxxxxxxxxxx > Signed-off-by: Jan Kara <jack@xxxxxxx> Nice catch. It's been there since v6.15 I guess. Looks like it didn't get caught in xfstests either then. We have generic/737, but looks like it only covers O_SYNC dio writes. Let me enhance that to cover O_DYSNC dio writes too. Looks good to me. Please feel free to add: Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@xxxxxxxxx> -ritesh