bna: PCI Probe Fix
authorRasesh Mody <rmody@brocade.com>
Tue, 30 Aug 2011 15:27:38 +0000 (15:27 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 15 Sep 2011 19:36:33 +0000 (15:36 -0400)
Change details:
 - Return error as -EIO if bnad_res_alloc fails
 - Release the configuration lock before registering with net_device layer.

Signed-off-by: Gurunatha Karaje <gkaraje@brocade.com>
Signed-off-by: Rasesh Mody <rmody@brocade.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/brocade/bna/bnad.c

index 1f4269c4c9c564b1a2f49bac3a33fba483de486a..939abd45c0a4b47a62d4b4334ccf7e9d896fd62a 100644 (file)
@@ -3253,8 +3253,10 @@ bnad_pci_probe(struct pci_dev *pdev,
        spin_unlock_irqrestore(&bnad->bna_lock, flags);
 
        err = bnad_res_alloc(bnad, &bnad->mod_res_info[0], BNA_MOD_RES_T_MAX);
-       if (err)
+       if (err) {
+               err = -EIO;
                goto disable_ioceth;
+       }
 
        spin_lock_irqsave(&bnad->bna_lock, flags);
        bna_mod_init(&bnad->bna, &bnad->mod_res_info[0]);
@@ -3266,6 +3268,8 @@ bnad_pci_probe(struct pci_dev *pdev,
        bnad_set_netdev_perm_addr(bnad);
        spin_unlock_irqrestore(&bnad->bna_lock, flags);
 
+       mutex_unlock(&bnad->conf_mutex);
+
        /* Finally, reguister with net_device layer */
        err = register_netdev(netdev);
        if (err) {
@@ -3274,6 +3278,8 @@ bnad_pci_probe(struct pci_dev *pdev,
        }
        set_bit(BNAD_RF_NETDEV_REGISTERED, &bnad->run_flags);
 
+       return 0;
+
 probe_success:
        mutex_unlock(&bnad->conf_mutex);
        return 0;