| From 91035f0b7d89291af728b6f3e370c3be58fcbe1b Mon Sep 17 00:00:00 2001 |
| From: Eric Dumazet <eric.dumazet@gmail.com> |
| Date: Fri, 18 Feb 2011 22:35:56 +0000 |
| Subject: tcp: fix inet_twsk_deschedule() |
| |
| From: Eric Dumazet <eric.dumazet@gmail.com> |
| |
| commit 91035f0b7d89291af728b6f3e370c3be58fcbe1b upstream. |
| |
| Eric W. Biederman reported a lockdep splat in inet_twsk_deschedule() |
| |
| This is caused by inet_twsk_purge(), run from process context, |
| and commit 575f4cd5a5b6394577 (net: Use rcu lookups in inet_twsk_purge.) |
| removed the BH disabling that was necessary. |
| |
| Add the BH disabling but fine grained, right before calling |
| inet_twsk_deschedule(), instead of whole function. |
| |
| With help from Linus Torvalds and Eric W. Biederman |
| |
| Reported-by: Eric W. Biederman <ebiederm@xmission.com> |
| Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> |
| CC: Daniel Lezcano <daniel.lezcano@free.fr> |
| CC: Pavel Emelyanov <xemul@openvz.org> |
| CC: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| net/ipv4/inet_timewait_sock.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/net/ipv4/inet_timewait_sock.c |
| +++ b/net/ipv4/inet_timewait_sock.c |
| @@ -504,7 +504,9 @@ restart: |
| } |
| |
| rcu_read_unlock(); |
| + local_bh_disable(); |
| inet_twsk_deschedule(tw, twdr); |
| + local_bh_enable(); |
| inet_twsk_put(tw); |
| goto restart_rcu; |
| } |