On Wed, Mar 29, 2017 at 11:41 AM, Johannes Thumshirn <jthumshirn@xxxxxxx> wrote: > After commit bcdde7e ("sysfs: make __sysfs_remove_dir() recursive") changed the > removal path of kernfs to make it recursive we have to remove the SAS host > before the SCSI host or we will see sysfs warnings on not found sysfs groups for > kobjects. > > Signed-off-by: Johannes Thumshirn <jthumshirn@xxxxxxx> > --- > drivers/scsi/pm8001/pm8001_init.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c > index 417368c..9116e9c 100644 > --- a/drivers/scsi/pm8001/pm8001_init.c > +++ b/drivers/scsi/pm8001/pm8001_init.c > @@ -1086,11 +1086,21 @@ static void pm8001_pci_remove(struct pci_dev *pdev) > { > struct sas_ha_struct *sha = pci_get_drvdata(pdev); > struct pm8001_hba_info *pm8001_ha; > + unsigned long flags; > + struct Scsi_Host *shost; > int i, j; > pm8001_ha = sha->lldd_ha; > - scsi_remove_host(pm8001_ha->shost); > + shost = pm8001_ha->shost; > + > + spin_lock_irqsave(shost->host_lock, flags); > + if (scsi_host_set_state(shost, SHOST_CANCEL)) > + WARN_ON(scsi_host_set_state(shost, SHOST_CANCEL_RECOVERY)); > + spin_unlock_irqrestore(shost->host_lock, flags); > + > sas_unregister_ha(sha); > - sas_remove_host(pm8001_ha->shost); > + sas_remove_host(shost); > + scsi_remove_host(shost); > + > list_del(&pm8001_ha->list); > PM8001_CHIP_DISP->interrupt_disable(pm8001_ha, 0xFF); > PM8001_CHIP_DISP->chip_soft_rst(pm8001_ha); > -- > 1.8.5.6 > Thanks Johannes for taking care of this. Looks good to me, I have a question regarding the scsi_host_set_state change, why do we need that? Can't we simply change the order of sas_remove_host and scsi_remove_host? Cheers? -- Jack Wang