qlge: Only free resources if they were allocated
authorBreno Leitao <leitao@linux.vnet.ibm.com>
Mon, 25 Jan 2010 23:46:58 +0000 (15:46 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 25 Jan 2010 23:46:58 +0000 (15:46 -0800)
Currently qlge tries to release regions even if they were not allocated.
This causes messages like the following in the kernel log

Trying to free nonexistent resource <00000000006af400-00000000006af4ff>
Trying to free nonexistent resource <00003c04ff9f4000-00003c04ff9f7fff>
Trying to free nonexistent resource <00003c04ffc00000-00003c04ffcfffff>

This patch fixes the goto logic in order to not release the resources
if they were not allocated.

Signed-off-by: Breno Leitao <leitao@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/qlge/qlge_main.c

index 707b391afa02e434fb33ac180ac661d358fb7438..894a7c84faeff851d2de5ca2a6112fe3107a7bd5 100644 (file)
@@ -4119,7 +4119,7 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
        err = pcie_set_readrq(pdev, 4096);
        if (err) {
                dev_err(&pdev->dev, "Set readrq failed.\n");
-               goto err_out;
+               goto err_out1;
        }
 
        err = pci_request_regions(pdev, DRV_NAME);
@@ -4140,7 +4140,7 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
 
        if (err) {
                dev_err(&pdev->dev, "No usable DMA configuration.\n");
-               goto err_out;
+               goto err_out2;
        }
 
        /* Set PCIe reset type for EEH to fundamental. */
@@ -4152,7 +4152,7 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
        if (!qdev->reg_base) {
                dev_err(&pdev->dev, "Register mapping failed.\n");
                err = -ENOMEM;
-               goto err_out;
+               goto err_out2;
        }
 
        qdev->doorbell_area_size = pci_resource_len(pdev, 3);
@@ -4162,14 +4162,14 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
        if (!qdev->doorbell_area) {
                dev_err(&pdev->dev, "Doorbell register mapping failed.\n");
                err = -ENOMEM;
-               goto err_out;
+               goto err_out2;
        }
 
        err = ql_get_board_info(qdev);
        if (err) {
                dev_err(&pdev->dev, "Register access failed.\n");
                err = -EIO;
-               goto err_out;
+               goto err_out2;
        }
        qdev->msg_enable = netif_msg_init(debug, default_msg);
        spin_lock_init(&qdev->hw_lock);
@@ -4179,7 +4179,7 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
        err = qdev->nic_ops->get_flash(qdev);
        if (err) {
                dev_err(&pdev->dev, "Invalid FLASH.\n");
-               goto err_out;
+               goto err_out2;
        }
 
        memcpy(ndev->perm_addr, ndev->dev_addr, ndev->addr_len);
@@ -4212,8 +4212,9 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
                         DRV_NAME, DRV_VERSION);
        }
        return 0;
-err_out:
+err_out2:
        ql_release_all(pdev);
+err_out1:
        pci_disable_device(pdev);
        return err;
 }