Re: [PATCH V2 1/1] loop: add file_start_write() and file_end_write()

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

 



On Tue, May 27, 2025 at 8:34 AM Ming Lei <ming.lei@xxxxxxxxxx> wrote:
>
> file_start_write() and file_end_write() should be added around ->write_iter().
>
> Recently we switch to ->write_iter() from vfs_iter_write(), and the
> implied fs_start_write() and fs_end_write() are lost.

Still referring to "fs_start_write()" and "fs_end_write()" here

>
> Also we never add them for dio code path, so add them back for covering
> both.
>
> Cc: Jeff Moyer <jmoyer@xxxxxxxxxx>
> Fixes: f2fed441c69b ("loop: stop using vfs_iter_{read,write} for buffered I/O")
> Fixes: bc07c10a3603 ("block: loop: support DIO & AIO")
> Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxx>
> ---
> V2:
>         - fix commit log & patch title
>
>  drivers/block/loop.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/block/loop.c b/drivers/block/loop.c
> index b8ba7de08753..7eca957dc656 100644
> --- a/drivers/block/loop.c
> +++ b/drivers/block/loop.c
> @@ -308,11 +308,14 @@ static void lo_complete_rq(struct request *rq)
>  static void lo_rw_aio_do_completion(struct loop_cmd *cmd)
>  {
>         struct request *rq = blk_mq_rq_from_pdu(cmd);
> +       struct loop_device *lo = rq->q->queuedata;
>
>         if (!atomic_dec_and_test(&cmd->ref))
>                 return;
>         kfree(cmd->bvec);
>         cmd->bvec = NULL;
> +       if (req_op(rq) == REQ_OP_WRITE)
> +               file_end_write(lo->lo_backing_file);
>         if (likely(!blk_should_fake_timeout(rq->q)))
>                 blk_mq_complete_request(rq);
>  }
> @@ -387,9 +390,10 @@ static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd,
>                 cmd->iocb.ki_flags = 0;
>         }
>
> -       if (rw == ITER_SOURCE)
> +       if (rw == ITER_SOURCE) {
> +               file_start_write(lo->lo_backing_file);
>                 ret = file->f_op->write_iter(&cmd->iocb, &iter);
> -       else
> +       } else
>                 ret = file->f_op->read_iter(&cmd->iocb, &iter);
>
>         lo_rw_aio_do_completion(cmd);
> --
> 2.47.0
>





[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