On 4/12/23 10:34 PM, Zheng Wang wrote: > In qedi_probe, it calls __qedi_probe, which bound &qedi->recovery_work > with qedi_recovery_handler and bound &qedi->board_disable_work > with qedi_board_disable_work. > > When it calls qedi_schedule_recovery_handler, it will finally > call schedule_delayed_work to start the work. > > When we call qedi_remove to remove the driver, there > may be a sequence as follows: > > Fix it by finishing the work before cleanup in qedi_remove. > > CPU0 CPU1 > > |qedi_recovery_handler > qedi_remove | > __qedi_remove | > iscsi_host_free | > scsi_host_put | > //free shost | > |iscsi_host_for_each_session > |//use qedi->shost > > Fixes: 4b1068f5d74b ("scsi: qedi: Add MFW error recovery process") > Signed-off-by: Zheng Wang <zyytlz.wz@xxxxxxx> > --- > v2: > - remove unnecessary comment suggested by Mike Christie and cancel the work > after qedi_ops->stop and qedi_ops->ll2->stop which ensure there is no more > work suggested by Manish Rangankar Look ok to me now. Thanks. Reviewed-by: Mike Christie <michael.christie@xxxxxxxxxx>