From 9896dc842e4983e8c6f21b432095f3c83f7000cc Mon Sep 17 00:00:00 2001 From: Chris Wright Date: Sat, 30 Jul 2005 22:12:49 -0700 Subject: [PATCH] add fix for early vlan initialization, fwd gentoo via daniel drake --- queue/early-vlan-fix.patch | 44 ++++++++++++++++++++++++++++++++++++++ queue/series | 1 + 2 files changed, 45 insertions(+) create mode 100644 queue/early-vlan-fix.patch diff --git a/queue/early-vlan-fix.patch b/queue/early-vlan-fix.patch new file mode 100644 index 00000000000..e6ac40c8c38 --- /dev/null +++ b/queue/early-vlan-fix.patch @@ -0,0 +1,44 @@ +From stable-bounces@linux.kernel.org Sat Jul 30 13:24:53 2005 +Date: Sat, 30 Jul 2005 21:25:10 +0100 +From: Daniel Drake +To: stable@kernel.org +Cc: tommy.christensen@tpack.net +Subject: [PATCH][VLAN]: Fix early vlan adding leads to not functional device + +From: Tommy Christensen +X-Git-Url: http://www.kernel.org/git/gitweb.cgi?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=f4637b55ba960d9987a836617271659e9b7b0de8 + +[VLAN]: Fix early vlan adding leads to not functional device + +OK, I can see what's happening here. eth0 doesn't detect link-up until +after a few seconds, so when the vlan interface is opened immediately +after eth0 has been opened, it inherits the link-down state. Subsequently +the vlan interface is never properly activated and are thus unable to +transmit any packets. + +dev->state bits are not supposed to be manipulated directly. Something +similar is probably needed for the netif_device_present() bit, although +I don't know how this is meant to work for a virtual device. + +Signed-off-by: David S. Miller +Signed-off-by: Chris Wright +--- + +--- a/net/8021q/vlan.c ++++ b/net/8021q/vlan.c +@@ -578,6 +578,14 @@ static int vlan_device_event(struct noti + if (!vlandev) + continue; + ++ if (netif_carrier_ok(dev)) { ++ if (!netif_carrier_ok(vlandev)) ++ netif_carrier_on(vlandev); ++ } else { ++ if (netif_carrier_ok(vlandev)) ++ netif_carrier_off(vlandev); ++ } ++ + if ((vlandev->state & VLAN_LINK_STATE_MASK) != flgs) { + vlandev->state = (vlandev->state &~ VLAN_LINK_STATE_MASK) + | flgs; + diff --git a/queue/series b/queue/series index 29c7d555b3f..9fe9903c7bf 100644 --- a/queue/series +++ b/queue/series @@ -9,3 +9,4 @@ netfilter-ip_conntrack_untracked-refcount.patch ipsec-array-overflow.patch bio_clone-fix.patch sys_get_thread_area-leak.patch +early-vlan-fix.patch -- 2.47.3