On Fri, Nov 29, 2019 at 08:26:36PM +0000, Martin Wilck wrote: > From: Martin Wilck <mwilck@xxxxxxxx> > > Since 45235022da99, the firmware is shut down early in the controller > shutdown process. This causes commands sent to the firmware (such as LOGO) > to hang forever. Eventually one or more timeouts will be triggered. > Move the stopping of the firmware until after sessions have terminated. > > Fixes: 45235022da99 ("scsi: qla2xxx: Fix driver unload by shutting down chip") > Signed-off-by: Martin Wilck <mwilck@xxxxxxxx> > --- > drivers/scsi/qla2xxx/qla_os.c | 21 ++++++++++----------- > 1 file changed, 10 insertions(+), 11 deletions(-) > > diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c > index 43d0aa0..0cc127d 100644 > --- a/drivers/scsi/qla2xxx/qla_os.c > +++ b/drivers/scsi/qla2xxx/qla_os.c > @@ -3710,6 +3710,16 @@ qla2x00_remove_one(struct pci_dev *pdev) > } > qla2x00_wait_for_hba_ready(base_vha); > > + qla2x00_wait_for_sess_deletion(base_vha); > + > + /* > + * if UNLOAD flag is already set, then continue unload, > + * where it was set first. > + */ > + if (test_bit(UNLOADING, &base_vha->dpc_flags)) > + return; > + > + set_bit(UNLOADING, &base_vha->dpc_flags); Hi Martin, Moving qla2x00_wait_for_sess_deletion up ensures hw->wq is flushed before shutdown is done. But I think we need to set UNLOADING bit earlier to break-up async discovery chain. The comment just above qla2x00_wait_for_sess_deletion definition mentions that. Thanks, Roman