>> Netdev features can be changed dynamically to off after vlan_vid_add >> was called, thus vlan_vid_del will skip ndo_vlan_rx_kill_vid and will >> leave the device driver with un-freed resources. > > Are you sure the fix isn't to make vlan_vid_add() check ->features instead > of ->hw_features.
This is exactly what this fix suggests, "->features" is not consistent and can be turned ON/OFF between vlan_add/del which can leave the NIC driver in inconsistent state ! > > Should we really be trying to add VLAN filters when the user has > turned it off? Well, I think it is debatable, but the current implementation is not consistent, especially for adding vlan 0 by default and then the user disables the vlan filter, this will cause the stack to never call the nic ndo_vlan_rx_kill_vid for the pre added vlan 0 and vise versa call kill_vid without add_vid, BUG ? So i think we have two options, use this patch, and always trust to delegate vlan_vid_add/del to the NIC when it's HW supports it, and the nic will be smart enough to know what to do with it (in case vlan filter is enabled/disabled). Or, for each vlan we can remember if it was added to the NIC or not so the stack will know whether to clean it up or not.