diff options
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/dev.c | 4 | ||||
-rw-r--r-- | net/core/pktgen.c | 22 | ||||
-rw-r--r-- | net/core/rtnetlink.c | 2 |
3 files changed, 16 insertions, 12 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index d94537914a7..bcb05cb799c 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -4294,10 +4294,8 @@ int netdev_set_master(struct net_device *slave, struct net_device *master) | |||
4294 | 4294 | ||
4295 | slave->master = master; | 4295 | slave->master = master; |
4296 | 4296 | ||
4297 | if (old) { | 4297 | if (old) |
4298 | synchronize_net(); | ||
4299 | dev_put(old); | 4298 | dev_put(old); |
4300 | } | ||
4301 | return 0; | 4299 | return 0; |
4302 | } | 4300 | } |
4303 | EXPORT_SYMBOL(netdev_set_master); | 4301 | EXPORT_SYMBOL(netdev_set_master); |
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 67870e9fd09..f76079cd750 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
@@ -3544,13 +3544,12 @@ static int pktgen_add_device(struct pktgen_thread *t, const char *ifname) | |||
3544 | return -ENOMEM; | 3544 | return -ENOMEM; |
3545 | 3545 | ||
3546 | strcpy(pkt_dev->odevname, ifname); | 3546 | strcpy(pkt_dev->odevname, ifname); |
3547 | pkt_dev->flows = vmalloc_node(MAX_CFLOWS * sizeof(struct flow_state), | 3547 | pkt_dev->flows = vzalloc_node(MAX_CFLOWS * sizeof(struct flow_state), |
3548 | node); | 3548 | node); |
3549 | if (pkt_dev->flows == NULL) { | 3549 | if (pkt_dev->flows == NULL) { |
3550 | kfree(pkt_dev); | 3550 | kfree(pkt_dev); |
3551 | return -ENOMEM; | 3551 | return -ENOMEM; |
3552 | } | 3552 | } |
3553 | memset(pkt_dev->flows, 0, MAX_CFLOWS * sizeof(struct flow_state)); | ||
3554 | 3553 | ||
3555 | pkt_dev->removal_mark = 0; | 3554 | pkt_dev->removal_mark = 0; |
3556 | pkt_dev->min_pkt_size = ETH_ZLEN; | 3555 | pkt_dev->min_pkt_size = ETH_ZLEN; |
@@ -3708,6 +3707,7 @@ static int __init pg_init(void) | |||
3708 | { | 3707 | { |
3709 | int cpu; | 3708 | int cpu; |
3710 | struct proc_dir_entry *pe; | 3709 | struct proc_dir_entry *pe; |
3710 | int ret = 0; | ||
3711 | 3711 | ||
3712 | pr_info("%s", version); | 3712 | pr_info("%s", version); |
3713 | 3713 | ||
@@ -3718,11 +3718,10 @@ static int __init pg_init(void) | |||
3718 | pe = proc_create(PGCTRL, 0600, pg_proc_dir, &pktgen_fops); | 3718 | pe = proc_create(PGCTRL, 0600, pg_proc_dir, &pktgen_fops); |
3719 | if (pe == NULL) { | 3719 | if (pe == NULL) { |
3720 | pr_err("ERROR: cannot create %s procfs entry\n", PGCTRL); | 3720 | pr_err("ERROR: cannot create %s procfs entry\n", PGCTRL); |
3721 | proc_net_remove(&init_net, PG_PROC_DIR); | 3721 | ret = -EINVAL; |
3722 | return -EINVAL; | 3722 | goto remove_dir; |
3723 | } | 3723 | } |
3724 | 3724 | ||
3725 | /* Register us to receive netdevice events */ | ||
3726 | register_netdevice_notifier(&pktgen_notifier_block); | 3725 | register_netdevice_notifier(&pktgen_notifier_block); |
3727 | 3726 | ||
3728 | for_each_online_cpu(cpu) { | 3727 | for_each_online_cpu(cpu) { |
@@ -3736,13 +3735,18 @@ static int __init pg_init(void) | |||
3736 | 3735 | ||
3737 | if (list_empty(&pktgen_threads)) { | 3736 | if (list_empty(&pktgen_threads)) { |
3738 | pr_err("ERROR: Initialization failed for all threads\n"); | 3737 | pr_err("ERROR: Initialization failed for all threads\n"); |
3739 | unregister_netdevice_notifier(&pktgen_notifier_block); | 3738 | ret = -ENODEV; |
3740 | remove_proc_entry(PGCTRL, pg_proc_dir); | 3739 | goto unregister; |
3741 | proc_net_remove(&init_net, PG_PROC_DIR); | ||
3742 | return -ENODEV; | ||
3743 | } | 3740 | } |
3744 | 3741 | ||
3745 | return 0; | 3742 | return 0; |
3743 | |||
3744 | unregister: | ||
3745 | unregister_netdevice_notifier(&pktgen_notifier_block); | ||
3746 | remove_proc_entry(PGCTRL, pg_proc_dir); | ||
3747 | remove_dir: | ||
3748 | proc_net_remove(&init_net, PG_PROC_DIR); | ||
3749 | return ret; | ||
3746 | } | 3750 | } |
3747 | 3751 | ||
3748 | static void __exit pg_cleanup(void) | 3752 | static void __exit pg_cleanup(void) |
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index d2ba2597c75..d1644e317e7 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
@@ -1956,6 +1956,8 @@ static int rtnetlink_event(struct notifier_block *this, unsigned long event, voi | |||
1956 | case NETDEV_GOING_DOWN: | 1956 | case NETDEV_GOING_DOWN: |
1957 | case NETDEV_UNREGISTER: | 1957 | case NETDEV_UNREGISTER: |
1958 | case NETDEV_UNREGISTER_BATCH: | 1958 | case NETDEV_UNREGISTER_BATCH: |
1959 | case NETDEV_RELEASE: | ||
1960 | case NETDEV_JOIN: | ||
1959 | break; | 1961 | break; |
1960 | default: | 1962 | default: |
1961 | rtmsg_ifinfo(RTM_NEWLINK, dev, 0); | 1963 | rtmsg_ifinfo(RTM_NEWLINK, dev, 0); |