diff options
Diffstat (limited to 'net/tipc/bearer.c')
-rw-r--r-- | net/tipc/bearer.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c index 70e3dacbf84a..bf7d6a44c6f2 100644 --- a/net/tipc/bearer.c +++ b/net/tipc/bearer.c | |||
@@ -386,6 +386,10 @@ int tipc_enable_l2_media(struct net *net, struct tipc_bearer *b, | |||
386 | dev = dev_get_by_name(net, driver_name); | 386 | dev = dev_get_by_name(net, driver_name); |
387 | if (!dev) | 387 | if (!dev) |
388 | return -ENODEV; | 388 | return -ENODEV; |
389 | if (tipc_mtu_bad(dev, 0)) { | ||
390 | dev_put(dev); | ||
391 | return -EINVAL; | ||
392 | } | ||
389 | 393 | ||
390 | /* Associate TIPC bearer with L2 bearer */ | 394 | /* Associate TIPC bearer with L2 bearer */ |
391 | rcu_assign_pointer(b->media_ptr, dev); | 395 | rcu_assign_pointer(b->media_ptr, dev); |
@@ -524,14 +528,17 @@ static int tipc_l2_device_event(struct notifier_block *nb, unsigned long evt, | |||
524 | if (!b_ptr) | 528 | if (!b_ptr) |
525 | return NOTIFY_DONE; | 529 | return NOTIFY_DONE; |
526 | 530 | ||
527 | b_ptr->mtu = dev->mtu; | ||
528 | |||
529 | switch (evt) { | 531 | switch (evt) { |
530 | case NETDEV_CHANGE: | 532 | case NETDEV_CHANGE: |
531 | if (netif_carrier_ok(dev)) | 533 | if (netif_carrier_ok(dev)) |
532 | break; | 534 | break; |
533 | case NETDEV_DOWN: | 535 | case NETDEV_DOWN: |
534 | case NETDEV_CHANGEMTU: | 536 | case NETDEV_CHANGEMTU: |
537 | if (tipc_mtu_bad(dev, 0)) { | ||
538 | bearer_disable(net, b_ptr, false); | ||
539 | break; | ||
540 | } | ||
541 | b_ptr->mtu = dev->mtu; | ||
535 | tipc_reset_bearer(net, b_ptr); | 542 | tipc_reset_bearer(net, b_ptr); |
536 | break; | 543 | break; |
537 | case NETDEV_CHANGEADDR: | 544 | case NETDEV_CHANGEADDR: |