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);
 }
                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);