From: Ajit Khaparde Date: Fri, 25 May 2012 21:21:23 +0530 Subject: [PATCH 23/58] be2net: fix be_vlan_add/rem_vid commit 80817cbf5ac13da76f3ee2b9259f26c09b385e84 upstream. 1) fix be_vlan_add/rem_vid to return proper status 2) perform appropriate housekeeping if firmware command succeeds. Signed-off-by: Ajit Khaparde Signed-off-by: David S. Miller --- drivers/net/ethernet/emulex/benet/be_main.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index a185e61..acef082 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c @@ -817,28 +817,37 @@ static int be_vid_config(struct be_adapter *adapter, bool vf, u32 vf_num) static void be_vlan_add_vid(struct net_device *netdev, u16 vid) { struct be_adapter *adapter = netdev_priv(netdev); + int status = 0; - adapter->vlans_added++; if (!be_physfn(adapter)) return; adapter->vlan_tag[vid] = 1; if (adapter->vlans_added <= (adapter->max_vlans + 1)) - be_vid_config(adapter, false, 0); + status = be_vid_config(adapter, false, 0); + + if (!status) + adapter->vlans_added++; + else + adapter->vlan_tag[vid] = 0; } static void be_vlan_rem_vid(struct net_device *netdev, u16 vid) { struct be_adapter *adapter = netdev_priv(netdev); - - adapter->vlans_added--; + int status = 0; if (!be_physfn(adapter)) return; adapter->vlan_tag[vid] = 0; if (adapter->vlans_added <= adapter->max_vlans) - be_vid_config(adapter, false, 0); + status = be_vid_config(adapter, false, 0); + + if (!status) + adapter->vlans_added--; + else + adapter->vlan_tag[vid] = 1; } static void be_set_rx_mode(struct net_device *netdev) -- 1.7.10