mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-10 15:19:51 +00:00
be2net: Fix be_vlan_add/rem_vid() routines
The current logic to put interface into VLAN Promiscous mode is not correct. We should increment "adapter->vlans_added" before calling be_vid_config(). Also removed some unwanted log messages. Signed-off-by: Kalesh AP <kalesh.purayil@emulex.com> Signed-off-by: Somnath Kotur <somnath.kotur@emulex.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
076d132958
commit
a6b74e01f0
@ -1097,8 +1097,6 @@ static int be_vid_config(struct be_adapter *adapter)
|
||||
dev_info(&adapter->pdev->dev,
|
||||
"Disabling VLAN Promiscuous mode.\n");
|
||||
adapter->flags &= ~BE_FLAGS_VLAN_PROMISC;
|
||||
dev_info(&adapter->pdev->dev,
|
||||
"Re-Enabling HW VLAN filtering\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1106,12 +1104,12 @@ static int be_vid_config(struct be_adapter *adapter)
|
||||
return status;
|
||||
|
||||
set_vlan_promisc:
|
||||
dev_warn(&adapter->pdev->dev, "Exhausted VLAN HW filters.\n");
|
||||
if (adapter->flags & BE_FLAGS_VLAN_PROMISC)
|
||||
return 0;
|
||||
|
||||
status = be_cmd_rx_filter(adapter, BE_FLAGS_VLAN_PROMISC, ON);
|
||||
if (!status) {
|
||||
dev_info(&adapter->pdev->dev, "Enable VLAN Promiscuous mode\n");
|
||||
dev_info(&adapter->pdev->dev, "Disabling HW VLAN filtering\n");
|
||||
adapter->flags |= BE_FLAGS_VLAN_PROMISC;
|
||||
} else
|
||||
dev_err(&adapter->pdev->dev,
|
||||
@ -1124,19 +1122,18 @@ static int be_vlan_add_vid(struct net_device *netdev, __be16 proto, u16 vid)
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
int status = 0;
|
||||
|
||||
|
||||
/* Packets with VID 0 are always received by Lancer by default */
|
||||
if (lancer_chip(adapter) && vid == 0)
|
||||
goto ret;
|
||||
|
||||
adapter->vlan_tag[vid] = 1;
|
||||
if (adapter->vlans_added <= (be_max_vlans(adapter) + 1))
|
||||
status = be_vid_config(adapter);
|
||||
adapter->vlans_added++;
|
||||
|
||||
if (!status)
|
||||
adapter->vlans_added++;
|
||||
else
|
||||
status = be_vid_config(adapter);
|
||||
if (status) {
|
||||
adapter->vlans_added--;
|
||||
adapter->vlan_tag[vid] = 0;
|
||||
}
|
||||
ret:
|
||||
return status;
|
||||
}
|
||||
@ -1151,9 +1148,7 @@ static int be_vlan_rem_vid(struct net_device *netdev, __be16 proto, u16 vid)
|
||||
goto ret;
|
||||
|
||||
adapter->vlan_tag[vid] = 0;
|
||||
if (adapter->vlans_added <= be_max_vlans(adapter))
|
||||
status = be_vid_config(adapter);
|
||||
|
||||
status = be_vid_config(adapter);
|
||||
if (!status)
|
||||
adapter->vlans_added--;
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user