aic94xx: remove SCSI host before detaching from SAS transport
authorJack Wang <jinpu.wang@profitbricks.com>
Thu, 5 Nov 2015 11:33:45 +0000 (12:33 +0100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 10 Nov 2015 00:36:50 +0000 (19:36 -0500)
commit cff549e4860f ("scsi: proper state checking and module refcount
handling in scsi_device_get") the reference count of scsi device was
changed, which could lead to when rmmod with at least on drive attached,
SCSI error handle will run into infinite loop, and lockup the system.

Fix it by remove scsi host first, this way scsi core will not send
commands down after detaching SAS transport.

This is a follow up fix for Benjamin's fix for pm80xx.

See also:
http://www.spinics.net/lists/linux-scsi/msg90088.html

Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/aic94xx/aic94xx_init.c

index f6c336b05d5bbf6e0354c3f18697fd3350f3d09e..4b56976d9a9a0d85c9d55229924dab2bb83271f6 100644 (file)
@@ -704,10 +704,10 @@ static int asd_unregister_sas_ha(struct asd_ha_struct *asd_ha)
 {
        int err;
 
+       scsi_remove_host(asd_ha->sas_ha.core.shost);
        err = sas_unregister_ha(&asd_ha->sas_ha);
 
        sas_remove_host(asd_ha->sas_ha.core.shost);
-       scsi_remove_host(asd_ha->sas_ha.core.shost);
        scsi_host_put(asd_ha->sas_ha.core.shost);
 
        kfree(asd_ha->sas_ha.sas_phy);