qlcnic: fix mac address mgmt
authorAmit Kumar Salecha <amit.salecha@qlogic.com>
Tue, 22 Jun 2010 03:19:00 +0000 (03:19 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 23 Jun 2010 20:16:29 +0000 (13:16 -0700)
We first add mac address in driver local list and then send command to
fw to add same. There are checks in driver to ensure send command doesn't fail
before adding mac address in local list.

But instead fix should be:
Add mac address in fw and if it succeeds, add it in driver local list.

Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/qlcnic/qlcnic_hw.c

index 10ba72302fc924231ad971fec373325e6ea33bf4..ad124254b6a96e6901801b96da31987ada1c3fea 100644 (file)
@@ -413,10 +413,15 @@ static int qlcnic_nic_add_mac(struct qlcnic_adapter *adapter, u8 *addr)
                return -ENOMEM;
        }
        memcpy(cur->mac_addr, addr, ETH_ALEN);
-       list_add_tail(&cur->list, &adapter->mac_list);
 
-       return qlcnic_sre_macaddr_change(adapter,
-                               cur->mac_addr, QLCNIC_MAC_ADD);
+       if (qlcnic_sre_macaddr_change(adapter,
+                               cur->mac_addr, QLCNIC_MAC_ADD)) {
+               kfree(cur);
+               return -EIO;
+       }
+
+       list_add_tail(&cur->list, &adapter->mac_list);
+       return 0;
 }
 
 void qlcnic_set_multi(struct net_device *netdev)