> 2025年3月18日 09:07,Ming Lei <ming.lei@xxxxxxxxxx> 写道: > > On Mon, Mar 17, 2025 at 04:52:16PM +0800, 胡焜 wrote: >>> drivers/block/loop.c | 12 ++++++------ >>> 1 file changed, 6 insertions(+), 6 deletions(-) >> >>> diff --git a/drivers/block/loop.c b/drivers/block/loop.c >>> index 1ec7417c7f00..be7e20064427 100644 >>> --- a/drivers/block/loop.c >>> +++ b/drivers/block/loop.c >>> @@ -205,8 +205,6 @@ static bool lo_can_use_dio(struct loop_device *lo) >>> */ >>> static inline void loop_update_dio(struct loop_device *lo) >>> { >>> - bool dio_in_use = lo->lo_flags & LO_FLAGS_DIRECT_IO; >>> - >>> lockdep_assert_held(&lo->lo_mutex); >>> WARN_ON_ONCE(lo->lo_state == Lo_bound && >>> lo->lo_queue->mq_freeze_depth == 0); >>> @@ -215,10 +213,6 @@ static inline void loop_update_dio(struct loop_device *lo) >>> lo->lo_flags |= LO_FLAGS_DIRECT_IO; >>> if ((lo->lo_flags & LO_FLAGS_DIRECT_IO) && !lo_can_use_dio(lo)) >>> lo->lo_flags &= ~LO_FLAGS_DIRECT_IO; >>> - >>> - /* flush dirty pages before starting to issue direct I/O */ >>> - if ((lo->lo_flags & LO_FLAGS_DIRECT_IO) && !dio_in_use) >>> - vfs_fsync(lo->lo_backing_file, 0); >>> } >>> >>> /** >>> @@ -621,6 +615,9 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev, >>> if (get_loop_size(lo, file) != get_loop_size(lo, old_file)) >>> goto out_err; >> >>> + /* may work in dio, so flush page cache for avoiding race */ >>> + vfs_fsync(file, 0); >>> + >>> /* and ... switch */ >>> disk_force_media_change(lo->lo_disk); >>> blk_mq_freeze_queue(lo->lo_queue); >>> @@ -1098,6 +1095,9 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode, >>> if (error) >>> goto out_unlock; >> >>> + /* may work in dio, so flush page cache for avoiding race */ >>> + vfs_fsync(file, 0); >>> + >>> loop_update_dio(lo); >>> loop_sysfs_init(lo); >>> >>> -- >>> 2.44.0 >> >> >> Hello Ming, >> >> I would like to double check that this fix doesn't seem to have been merged into the main thread, will this version still be merged into mainline kernel tree? > > The V2 has been sent out after updating comment, please verify if it fixes your issue: > > https://lore.kernel.org/linux-block/20250318010318.3861682-1-ming.lei@xxxxxxxxxx/ > > If yes, feel free to provide one tested-by for moving on. > > > Thanks, > Ming Hi Ming, I have tested the V2 patch you sent, and it has successfully fixed the issue. Thank you for the update! Tested-by: Kun Hu <huk23@xxxxxxxxxxxxxx>, Jiaji Qin <jjtan24@xxxxxxxxxxxxxx>. ————— Thanks, Kun