Re: [PATCH] loop: move vfs_fsync() out of loop_update_dio()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> 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






[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux