diff options
Diffstat (limited to 'net/ipv4/tcp_minisocks.c')
-rw-r--r-- | net/ipv4/tcp_minisocks.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c index e36eff0403f4..b079b619b60c 100644 --- a/net/ipv4/tcp_minisocks.c +++ b/net/ipv4/tcp_minisocks.c | |||
@@ -310,10 +310,16 @@ void tcp_time_wait(struct sock *sk, int state, int timeo) | |||
310 | if (state == TCP_TIME_WAIT) | 310 | if (state == TCP_TIME_WAIT) |
311 | timeo = TCP_TIMEWAIT_LEN; | 311 | timeo = TCP_TIMEWAIT_LEN; |
312 | 312 | ||
313 | /* tw_timer is pinned, so we need to make sure BH are disabled | ||
314 | * in following section, otherwise timer handler could run before | ||
315 | * we complete the initialization. | ||
316 | */ | ||
317 | local_bh_disable(); | ||
313 | inet_twsk_schedule(tw, timeo); | 318 | inet_twsk_schedule(tw, timeo); |
314 | /* Linkage updates. */ | 319 | /* Linkage updates. */ |
315 | __inet_twsk_hashdance(tw, sk, &tcp_hashinfo); | 320 | __inet_twsk_hashdance(tw, sk, &tcp_hashinfo); |
316 | inet_twsk_put(tw); | 321 | inet_twsk_put(tw); |
322 | local_bh_enable(); | ||
317 | } else { | 323 | } else { |
318 | /* Sorry, if we're out of memory, just CLOSE this | 324 | /* Sorry, if we're out of memory, just CLOSE this |
319 | * socket up. We've got bigger problems than | 325 | * socket up. We've got bigger problems than |