Message ID | 20200421204621.19228-3-mwilck@suse.com (mailing list archive) |
---|---|
State | Mainlined |
Commit | 5a263892d7d0b4fe351363f8d1a14c6a75955475 |
Headers | show |
Series | scsi: qla2xxx: fixes for driver unloading | expand |
On 4/21/20 3:46 PM, mwilck@suse.com wrote: > From: Martin Wilck <mwilck@suse.com> > > qlt_free_session_done() tries to post async PRLO / LOGO, and > waits for the completion of these async commands. If UNLOADING > is set, this is doomed to timeout, because the async logout > command will never complete. > > The only way to avoid waiting pointlessly is to fail posting > these commands in the first place if the driver is in UNLOADING state. > In general, posting any command should be avoided when the driver > is UNLOADING. > > With this patch, "rmmod qla2xxx" completes without noticeable delay. > > Fixes: 45235022da99 ("scsi: qla2xxx: Fix driver unload by shutting down chip") > Signed-off-by: Martin Wilck <mwilck@suse.com> > --- > drivers/scsi/qla2xxx/qla_os.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c > index ce0dabb..8cce3e2 100644 > --- a/drivers/scsi/qla2xxx/qla_os.c > +++ b/drivers/scsi/qla2xxx/qla_os.c > @@ -4862,6 +4862,9 @@ qla2x00_alloc_work(struct scsi_qla_host *vha, enum qla_work_type type) > struct qla_work_evt *e; > uint8_t bail; > > + if (test_bit(UNLOADING, &vha->dpc_flags)) > + return NULL; > + > QLA_VHA_MARK_BUSY(vha, bail); > if (bail) > return NULL; > Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index ce0dabb..8cce3e2 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -4862,6 +4862,9 @@ qla2x00_alloc_work(struct scsi_qla_host *vha, enum qla_work_type type) struct qla_work_evt *e; uint8_t bail; + if (test_bit(UNLOADING, &vha->dpc_flags)) + return NULL; + QLA_VHA_MARK_BUSY(vha, bail); if (bail) return NULL;