>> 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.

Reply via email to