c5749639f2
In qedi_probe() we call __qedi_probe() which initializes
&qedi->recovery_work with qedi_recovery_handler() and
&qedi->board_disable_work with qedi_board_disable_work().
When qedi_schedule_recovery_handler() is called, schedule_delayed_work()
will finally start the work.
In qedi_remove(), which is called to remove the driver, the following
sequence may be observed:
Fix this 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
Cancel recovery_work and board_disable_work in __qedi_remove().
Fixes:
|
||
---|---|---|
.. | ||
Kconfig | ||
Makefile | ||
qedi_dbg.c | ||
qedi_dbg.h | ||
qedi_debugfs.c | ||
qedi_fw_api.c | ||
qedi_fw_iscsi.h | ||
qedi_fw_scsi.h | ||
qedi_fw.c | ||
qedi_gbl.h | ||
qedi_hsi.h | ||
qedi_iscsi.c | ||
qedi_iscsi.h | ||
qedi_main.c | ||
qedi_nvm_iscsi_cfg.h | ||
qedi_sysfs.c | ||
qedi_version.h | ||
qedi.h |