Sorry about the fix. This is a false positive which should be ignored. The work will be posted on ha->dpc_thread. In qla4xxx_remove_adapter, it will call destroy_workqueue(ha->dpc_thread); Regards, Zheng Zheng Wang <zyytlz.wz@xxxxxxx> 于2023年3月10日周五 02:38写道: > > In qla4xxx_probe_adapter, &ha->dpc_work is bound with > qla4xxx_do_dpc. qla4xxx_post_aen_work may be called > to start the work. > > If we remove the module which will call qla4xxx_remove_adapter > to make cleanup, there may be a unfinished work. The possible > sequence is as follows: > > Fix it by canceling the work before cleanup in qla4xxx_remove_adapter > > CPU0 CPUc1 > > |qla4xxx_do_dpc > qla4xxx_remove_adapter| > scsi_remove_host | > kfree(ha->host) | > | > | iscsi_host_for_each_session > | //use ha->host > Fixes: afaf5a2d341d ("[SCSI] Initial Commit of qla4xxx") > Signed-off-by: Zheng Wang <zyytlz.wz@xxxxxxx> > --- > drivers/scsi/qla4xxx/ql4_os.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c > index 005502125b27..d530cc853f43 100644 > --- a/drivers/scsi/qla4xxx/ql4_os.c > +++ b/drivers/scsi/qla4xxx/ql4_os.c > @@ -9001,6 +9001,7 @@ static void qla4xxx_remove_adapter(struct pci_dev *pdev) > if (!pci_is_enabled(pdev)) > return; > > + cancel_work_sync(&ha->dpc_work); > ha = pci_get_drvdata(pdev); > > if (is_qla40XX(ha)) > -- > 2.25.1 >