diff options
Diffstat (limited to 'net/ipv4/tcp_ipv4.c')
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 1eac84b8044e..c6bc0c4d19c6 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -2430,6 +2430,8 @@ static void __net_exit tcp_sk_exit(struct net *net) | |||
2430 | { | 2430 | { |
2431 | int cpu; | 2431 | int cpu; |
2432 | 2432 | ||
2433 | module_put(net->ipv4.tcp_congestion_control->owner); | ||
2434 | |||
2433 | for_each_possible_cpu(cpu) | 2435 | for_each_possible_cpu(cpu) |
2434 | inet_ctl_sock_destroy(*per_cpu_ptr(net->ipv4.tcp_sk, cpu)); | 2436 | inet_ctl_sock_destroy(*per_cpu_ptr(net->ipv4.tcp_sk, cpu)); |
2435 | free_percpu(net->ipv4.tcp_sk); | 2437 | free_percpu(net->ipv4.tcp_sk); |
@@ -2522,6 +2524,13 @@ static int __net_init tcp_sk_init(struct net *net) | |||
2522 | net->ipv4.sysctl_tcp_fastopen_blackhole_timeout = 60 * 60; | 2524 | net->ipv4.sysctl_tcp_fastopen_blackhole_timeout = 60 * 60; |
2523 | atomic_set(&net->ipv4.tfo_active_disable_times, 0); | 2525 | atomic_set(&net->ipv4.tfo_active_disable_times, 0); |
2524 | 2526 | ||
2527 | /* Reno is always built in */ | ||
2528 | if (!net_eq(net, &init_net) && | ||
2529 | try_module_get(init_net.ipv4.tcp_congestion_control->owner)) | ||
2530 | net->ipv4.tcp_congestion_control = init_net.ipv4.tcp_congestion_control; | ||
2531 | else | ||
2532 | net->ipv4.tcp_congestion_control = &tcp_reno; | ||
2533 | |||
2525 | return 0; | 2534 | return 0; |
2526 | fail: | 2535 | fail: |
2527 | tcp_sk_exit(net); | 2536 | tcp_sk_exit(net); |