> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-boun...@osuosl.org> On Behalf Of Jacob 
> Keller
> Sent: Wednesday, May 8, 2024 11:40 PM
> To: Intel Wired LAN <intel-wired-...@lists.osuosl.org>
> Cc: Keller, Jacob E <jacob.e.kel...@intel.com>
> Subject: [Intel-wired-lan] [PATCH iwl-net] ice: fix accounting if a VLAN 
> already exists
>
> The ice_vsi_add_vlan() function is used to add a VLAN filter for the target 
> VSI. This function prepares a filter in the switch table for the given VSI.
> If it succeeds, the vsi->num_vlan counter is incremented.
>
> It is not considered an error to add a VLAN which already exists in the 
> switch table, so the function explicitly checks and ignores -EEXIST. The
> vsi->num_vlan counter is still incremented.
>
> This seems incorrect, as it means we can double-count in the case where the 
> same VLAN is added twice by the caller. The actual table will have one less 
> filter than the count.
>
> The ice_vsi_del_vlan() function similarly checks and handles the -ENOENT 
> condition for when deleting a filter that doesn't exist. This flow only 
> decrements the vsi->num_vlan if it actually deleted a filter.
>
> The vsi->num_vlan counter is used only in a few places, primarily related to 
> tracking the number of non-zero VLANs. If the vsi->num_vlans gets out of 
> sync, then ice_vsi_num_non_zero_vlans() will incorrectly report more VLANs 
> than are present, and ice_vsi_has_non_zero_vlans() could return true 
> potentially in cases where there are only VLAN 0 filters left.
>
> Fix this by only incrementing the vsi->num_vlan in the case where we actually 
> added an entry, and not in the case where the entry already existed.
>
> Fixes: a1ffafb0b4a4 ("ice: Support configuring the device to Double VLAN 
> Mode")
> Signed-off-by: Jacob Keller <jacob.e.kel...@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice_vsi_vlan_lib.c | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
>

Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pu...@intel.com> (A 
Contingent worker at Intel)

Reply via email to