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

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

 



> 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?

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