--- x/net/8021q/vlan.c +++ y/net/8021q/vlan.c @@ -384,7 +384,7 @@ static int vlan_device_event(struct noti dev->name); vlan_vid_add(dev, htons(ETH_P_8021Q), 0); } - if (event == NETDEV_DOWN) + if (event == NETDEV_DOWN && (dev->features & NETIF_F_HW_VLAN_CTAG_FILTER)) vlan_vid_del(dev, htons(ETH_P_8021Q), 0); vlan_info = rtnl_dereference(dev->vlan_info); @@ -486,6 +486,7 @@ static int vlan_device_event(struct noti break; } unregister_netdevice_many(&list); + vlan_vid_del(dev, htons(ETH_P_8021Q), 0); break; case NETDEV_PRE_TYPE_CHANGE: