]> Pileus Git - ~andy/linux/commitdiff
[SCSI] lpfc 8.1.5 : Fix cleanup code in the lpfc_pci_probe_one() error code path
authorJames Smart <James.Smart@Emulex.Com>
Mon, 17 Apr 2006 02:26:50 +0000 (22:26 -0400)
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>
Thu, 20 Apr 2006 00:49:34 +0000 (20:49 -0400)
Fix cleanup code in the lpfc_pci_probe_one() error code path.

This changes the original patch by:
  - hardsetting the return value from lpfc_pci_probe_one() to
    -ENODEV (negative value) if we fail attach
  - removes the checks from lpfc_pci_remove_one() validating the
    host and phba pointers as it's no longer needed.

Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/lpfc/lpfc_init.c

index 033778ced16cffceb972b669bd55e4e8ca6ed543..1b16ca0f500761e6e66fda1c1f0179f551f5844d 100644 (file)
@@ -1618,7 +1618,7 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)
 
        error = lpfc_alloc_sysfs_attr(phba);
        if (error)
-               goto out_kthread_stop;
+               goto out_remove_host;
 
        error = request_irq(phba->pcidev->irq, lpfc_intr_handler, SA_SHIRQ,
                                                        LPFC_DRIVER_NAME, phba);
@@ -1635,8 +1635,10 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)
        phba->HCregaddr = phba->ctrl_regs_memmap_p + HC_REG_OFFSET;
 
        error = lpfc_sli_hba_setup(phba);
-       if (error)
+       if (error) {
+               error = -ENODEV;
                goto out_free_irq;
+       }
 
        if (phba->cfg_poll & DISABLE_FCP_RING_INT) {
                spin_lock_irq(phba->host->host_lock);
@@ -1691,6 +1693,9 @@ out_free_irq:
        free_irq(phba->pcidev->irq, phba);
 out_free_sysfs_attr:
        lpfc_free_sysfs_attr(phba);
+out_remove_host:
+       fc_remove_host(phba->host);
+       scsi_remove_host(phba->host);
 out_kthread_stop:
        kthread_stop(phba->worker_thread);
 out_free_iocbq:
@@ -1712,12 +1717,14 @@ out_iounmap_slim:
 out_idr_remove:
        idr_remove(&lpfc_hba_index, phba->brd_no);
 out_put_host:
+       phba->host = NULL;
        scsi_host_put(host);
 out_release_regions:
        pci_release_regions(pdev);
 out_disable_device:
        pci_disable_device(pdev);
 out:
+       pci_set_drvdata(pdev, NULL);
        return error;
 }