On 2022/5/17 13:53, Ming Lei wrote: > + > +static void ubd_cancel_queue(struct ubd_queue *ubq) > +{ > + int i; > + > + for (i = 0; i < ubq->q_depth; i++) { > + struct ubd_io *io = &ubq->ios[i]; > + > + if (io->flags & UBD_IO_FLAG_ACTIVE) { > + io->flags &= ~UBD_IO_FLAG_ACTIVE; > + io_uring_cmd_done(io->cmd, UBD_IO_RES_ABORT, 0); > + } > + } > +} Hi Ming, When ubdsrv sends STOP_DEV and all active IOs in ubd_drv are done(UBD_IO_RES_ABORT), there may be still some IOs handled by ubdsrv(UBD_IO_FLAG_ACTIVE not set). When these IOs complete and return to ubd_drv, how to handle them? I find that UBD_IO_FETCH_REQ are still set, so will these IOs be issued to ubdsrv again or canceled? (I see ubd_drv fails IOs when the daemon is dying but maybe here the daemon is still alive) > + > +/* Cancel all pending commands, must be called after del_gendisk() returns */ > +static void ubd_cancel_dev(struct ubd_device *ub) > +{ > + int i; > + > + for (i = 0; i < ub->dev_info.nr_hw_queues; i++) > + ubd_cancel_queue(ubd_get_queue(ub, i)); > +} > + > +static void ubd_stop_dev(struct ubd_device *ub) > +{ > + mutex_lock(&ub->mutex); > + if (!disk_live(ub->ub_disk)) > + goto unlock; > + > + del_gendisk(ub->ub_disk); > + ub->dev_info.state = UBD_S_DEV_DEAD; > + ub->dev_info.ubdsrv_pid = -1; > + ubd_cancel_dev(ub); > + unlock: > + mutex_unlock(&ub->mutex); > + cancel_delayed_work_sync(&ub->monitor_work); > +} > + > +static int ubd_ctrl_stop_dev(struct ubd_device *ub) > +{ > + ubd_stop_dev(ub); > + return 0; > +} > +