Commit 75697025 authored by Jacob Keller's avatar Jacob Keller Committed by Jeff Kirsher

i40e: delete filter after adding its replacement when converting

Fix a subtle issue with the code for converting VID=-1 filters into VID=0
filters when adding a new VLAN. Previously the code deleted the VID=-1
filter, and then added a new VID=0 filter. In the rare case that the
addition fails due to -ENOMEM, we end up completely deleting the filter
which prevents recovery if memory pressure subsides. While it is not
strictly an issue because it is likely that memory issues would result
in many other problems, we shouldn't delete the filter until after the
addition succeeds.

Change-ID: Icba07ddd04ecc6a3b27c2e29f2c1c8673d266826
Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent ac9e2390
...@@ -2535,7 +2535,6 @@ int i40e_vsi_add_vlan(struct i40e_vsi *vsi, s16 vid) ...@@ -2535,7 +2535,6 @@ int i40e_vsi_add_vlan(struct i40e_vsi *vsi, s16 vid)
I40E_VLAN_ANY); I40E_VLAN_ANY);
if (!del_f) if (!del_f)
continue; continue;
__i40e_del_filter(vsi, del_f);
add_f = i40e_add_filter(vsi, f->macaddr, 0); add_f = i40e_add_filter(vsi, f->macaddr, 0);
if (!add_f) { if (!add_f) {
dev_info(&vsi->back->pdev->dev, dev_info(&vsi->back->pdev->dev,
...@@ -2544,6 +2543,7 @@ int i40e_vsi_add_vlan(struct i40e_vsi *vsi, s16 vid) ...@@ -2544,6 +2543,7 @@ int i40e_vsi_add_vlan(struct i40e_vsi *vsi, s16 vid)
spin_unlock_bh(&vsi->mac_filter_hash_lock); spin_unlock_bh(&vsi->mac_filter_hash_lock);
return -ENOMEM; return -ENOMEM;
} }
__i40e_del_filter(vsi, del_f);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment