On Mon, 13 Aug 2012 17:27:02 +0200 Jiri Pirko <jiri@xxxxxxxxxxx> wrote: > Signed-off-by: Jiri Pirko <jiri@xxxxxxxxxxx> > --- > net/8021q/vlan.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c > index 9096bcb..739665e 100644 > --- a/net/8021q/vlan.c > +++ b/net/8021q/vlan.c > @@ -105,6 +105,8 @@ void unregister_vlan_dev(struct net_device *dev, struct list_head *head) > */ > unregister_netdevice_queue(dev, head); > > + netdev_upper_dev_unlink(real_dev, dev); > + > if (grp->nr_vlan_devs == 0) > vlan_gvrp_uninit_applicant(real_dev); > > @@ -162,9 +164,13 @@ int register_vlan_dev(struct net_device *dev) > if (err < 0) > goto out_uninit_applicant; > > + err = netdev_upper_dev_link(real_dev, dev); > + if (err) > + goto out_uninit_applicant; > + > err = register_netdevice(dev); > if (err < 0) > - goto out_uninit_applicant; > + goto out_upper_dev_unlink; ^^^^^^^^^^^^^^^^^^^^^^^^^^^ see below: > > /* Account for reference in struct vlan_dev_priv */ > dev_hold(real_dev); > @@ -180,6 +186,8 @@ int register_vlan_dev(struct net_device *dev) > > return 0; > > +upper_dev_unlink: ^^^^^^^^^^^^^^^^^^^ should be out_upper_dev_unlink: fbl > + netdev_upper_dev_unlink(real_dev, dev); > out_uninit_applicant: > if (grp->nr_vlan_devs == 0) > vlan_gvrp_uninit_applicant(real_dev);