aboutsummaryrefslogtreecommitdiffstats
path: root/net/8021q
diff options
context:
space:
mode:
authorPadmanabh Ratnakar <padmanabh.ratnakar@avagotech.com>2015-11-03 09:55:59 -0500
committerDavid S. Miller <davem@davemloft.net>2015-11-03 11:29:56 -0500
commit74f2d19caff885bc656e9acf2a6e727b66ab0ed1 (patch)
tree0d056329707ce290142860ca6095f08e788f9a34 /net/8021q
parent754107e34165373b3696620cef344227b10eaa99 (diff)
vlan: Invoke driver vlan hooks only if device is present
NIC drivers mark device as detached during error recovery. It expects no manangement hooks to be invoked in this state. Invoke driver vlan hooks only if device is present. Signed-off-by: Padmanabh Ratnakar <padmanabh.ratnakar@avagotech.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/8021q')
-rw-r--r--net/8021q/vlan_core.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c
index 61bf2a06e85d..496b27588493 100644
--- a/net/8021q/vlan_core.c
+++ b/net/8021q/vlan_core.c
@@ -206,7 +206,10 @@ static int __vlan_vid_add(struct vlan_info *vlan_info, __be16 proto, u16 vid,
206 return -ENOMEM; 206 return -ENOMEM;
207 207
208 if (vlan_hw_filter_capable(dev, vid_info)) { 208 if (vlan_hw_filter_capable(dev, vid_info)) {
209 err = ops->ndo_vlan_rx_add_vid(dev, proto, vid); 209 if (netif_device_present(dev))
210 err = ops->ndo_vlan_rx_add_vid(dev, proto, vid);
211 else
212 err = -ENODEV;
210 if (err) { 213 if (err) {
211 kfree(vid_info); 214 kfree(vid_info);
212 return err; 215 return err;
@@ -264,7 +267,10 @@ static void __vlan_vid_del(struct vlan_info *vlan_info,
264 int err; 267 int err;
265 268
266 if (vlan_hw_filter_capable(dev, vid_info)) { 269 if (vlan_hw_filter_capable(dev, vid_info)) {
267 err = ops->ndo_vlan_rx_kill_vid(dev, proto, vid); 270 if (netif_device_present(dev))
271 err = ops->ndo_vlan_rx_kill_vid(dev, proto, vid);
272 else
273 err = -ENODEV;
268 if (err) { 274 if (err) {
269 pr_warn("failed to kill vid %04x/%d for device %s\n", 275 pr_warn("failed to kill vid %04x/%d for device %s\n",
270 proto, vid, dev->name); 276 proto, vid, dev->name);