be2iscsi : Fix the PCI request region reserving.
authorJohn Soni Jose <sony.john-n@emulex.com>
Sat, 25 Apr 2015 02:47:19 +0000 (08:17 +0530)
committerJames Bottomley <JBottomley@Odin.com>
Mon, 25 May 2015 15:46:32 +0000 (08:46 -0700)
 Reserve device PCI I/O and Memory resources.

Signed-off-by: John Soni Jose <sony.john-n@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Odin.com>
drivers/scsi/be2iscsi/be_main.c

index a8c2cd6..a39a603 100644 (file)
@@ -668,14 +668,20 @@ static int beiscsi_enable_pci(struct pci_dev *pcidev)
                return ret;
        }
 
+       ret = pci_request_regions(pcidev, DRV_NAME);
+       if (ret) {
+               dev_err(&pcidev->dev,
+                               "beiscsi_enable_pci - request region failed\n");
+               goto pci_dev_disable;
+       }
+
        pci_set_master(pcidev);
        ret = pci_set_dma_mask(pcidev, DMA_BIT_MASK(64));
        if (ret) {
                ret = pci_set_dma_mask(pcidev, DMA_BIT_MASK(32));
                if (ret) {
                        dev_err(&pcidev->dev, "Could not set PCI DMA Mask\n");
-                       pci_disable_device(pcidev);
-                       return ret;
+                       goto pci_region_release;
                } else {
                        ret = pci_set_consistent_dma_mask(pcidev,
                                                          DMA_BIT_MASK(32));
@@ -684,11 +690,17 @@ static int beiscsi_enable_pci(struct pci_dev *pcidev)
                ret = pci_set_consistent_dma_mask(pcidev, DMA_BIT_MASK(64));
                if (ret) {
                        dev_err(&pcidev->dev, "Could not set PCI DMA Mask\n");
-                       pci_disable_device(pcidev);
-                       return ret;
+                       goto pci_region_release;
                }
        }
        return 0;
+
+pci_region_release:
+       pci_release_regions(pcidev);
+pci_dev_disable:
+       pci_disable_device(pcidev);
+
+       return ret;
 }
 
 static int be_ctrl_init(struct beiscsi_hba *phba, struct pci_dev *pdev)
@@ -5275,6 +5287,7 @@ static void beiscsi_remove(struct pci_dev *pcidev)
        iscsi_host_free(phba->shost);
        pci_disable_pcie_error_reporting(pcidev);
        pci_set_drvdata(pcidev, NULL);
+       pci_release_regions(pcidev);
        pci_disable_device(pcidev);
 }
 
@@ -5755,6 +5768,7 @@ hba_free:
        iscsi_host_free(phba->shost);
        pci_set_drvdata(pcidev, NULL);
 disable_pci:
+       pci_release_regions(pcidev);
        pci_disable_device(pcidev);
        return ret;
 }