diff options
Diffstat (limited to 'net/8021q/vlan.c')
-rw-r--r-- | net/8021q/vlan.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 1483243edf14..225aa2fac0e3 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c | |||
@@ -431,6 +431,7 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event, | |||
431 | struct vlan_group *grp; | 431 | struct vlan_group *grp; |
432 | int i, flgs; | 432 | int i, flgs; |
433 | struct net_device *vlandev; | 433 | struct net_device *vlandev; |
434 | struct vlan_dev_info *vlan; | ||
434 | LIST_HEAD(list); | 435 | LIST_HEAD(list); |
435 | 436 | ||
436 | if (is_vlan_dev(dev)) | 437 | if (is_vlan_dev(dev)) |
@@ -507,7 +508,9 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event, | |||
507 | if (!(flgs & IFF_UP)) | 508 | if (!(flgs & IFF_UP)) |
508 | continue; | 509 | continue; |
509 | 510 | ||
510 | dev_change_flags(vlandev, flgs & ~IFF_UP); | 511 | vlan = vlan_dev_info(vlandev); |
512 | if (!(vlan->flags & VLAN_FLAG_LOOSE_BINDING)) | ||
513 | dev_change_flags(vlandev, flgs & ~IFF_UP); | ||
511 | vlan_transfer_operstate(dev, vlandev); | 514 | vlan_transfer_operstate(dev, vlandev); |
512 | } | 515 | } |
513 | break; | 516 | break; |
@@ -523,7 +526,9 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event, | |||
523 | if (flgs & IFF_UP) | 526 | if (flgs & IFF_UP) |
524 | continue; | 527 | continue; |
525 | 528 | ||
526 | dev_change_flags(vlandev, flgs | IFF_UP); | 529 | vlan = vlan_dev_info(vlandev); |
530 | if (!(vlan->flags & VLAN_FLAG_LOOSE_BINDING)) | ||
531 | dev_change_flags(vlandev, flgs | IFF_UP); | ||
527 | vlan_transfer_operstate(dev, vlandev); | 532 | vlan_transfer_operstate(dev, vlandev); |
528 | } | 533 | } |
529 | break; | 534 | break; |