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 >