diff options
Diffstat (limited to 'net/mpls/af_mpls.c')
-rw-r--r-- | net/mpls/af_mpls.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c index 7b3f732269e4..1f93a5978f2a 100644 --- a/net/mpls/af_mpls.c +++ b/net/mpls/af_mpls.c | |||
@@ -541,7 +541,7 @@ static void mpls_ifdown(struct net_device *dev) | |||
541 | 541 | ||
542 | RCU_INIT_POINTER(dev->mpls_ptr, NULL); | 542 | RCU_INIT_POINTER(dev->mpls_ptr, NULL); |
543 | 543 | ||
544 | kfree(mdev); | 544 | kfree_rcu(mdev, rcu); |
545 | } | 545 | } |
546 | 546 | ||
547 | static int mpls_dev_notify(struct notifier_block *this, unsigned long event, | 547 | static int mpls_dev_notify(struct notifier_block *this, unsigned long event, |
@@ -564,6 +564,17 @@ static int mpls_dev_notify(struct notifier_block *this, unsigned long event, | |||
564 | case NETDEV_UNREGISTER: | 564 | case NETDEV_UNREGISTER: |
565 | mpls_ifdown(dev); | 565 | mpls_ifdown(dev); |
566 | break; | 566 | break; |
567 | case NETDEV_CHANGENAME: | ||
568 | mdev = mpls_dev_get(dev); | ||
569 | if (mdev) { | ||
570 | int err; | ||
571 | |||
572 | mpls_dev_sysctl_unregister(mdev); | ||
573 | err = mpls_dev_sysctl_register(dev, mdev); | ||
574 | if (err) | ||
575 | return notifier_from_errno(err); | ||
576 | } | ||
577 | break; | ||
567 | } | 578 | } |
568 | return NOTIFY_OK; | 579 | return NOTIFY_OK; |
569 | } | 580 | } |