1 From f9117482487441b19b19b14b0aad05bee8143e8d Mon Sep 17 00:00:00 2001
2 From: Thomas Gleixner <tglx@linutronix.de>
3 Date: Tue, 28 Jun 2011 10:59:58 +0200
4 Subject: [PATCH 019/366] net-flip-lock-dep-thingy.patch
6 =======================================================
7 [ INFO: possible circular locking dependency detected ]
9 -------------------------------------------------------
10 ip/1104 is trying to acquire lock:
11 (local_softirq_lock){+.+...}, at: [<ffffffff81056d12>] __local_lock+0x25/0x68
13 but task is already holding lock:
14 (sk_lock-AF_INET){+.+...}, at: [<ffffffff81433308>] lock_sock+0x10/0x12
16 which lock already depends on the new lock.
18 the existing dependency chain (in reverse order) is:
20 -> #1 (sk_lock-AF_INET){+.+...}:
21 [<ffffffff810836e5>] lock_acquire+0x103/0x12e
22 [<ffffffff813e2781>] lock_sock_nested+0x82/0x92
23 [<ffffffff81433308>] lock_sock+0x10/0x12
24 [<ffffffff81433afa>] tcp_close+0x1b/0x355
25 [<ffffffff81453c99>] inet_release+0xc3/0xcd
26 [<ffffffff813dff3f>] sock_release+0x1f/0x74
27 [<ffffffff813dffbb>] sock_close+0x27/0x2b
28 [<ffffffff81129c63>] fput+0x11d/0x1e3
29 [<ffffffff81126577>] filp_close+0x70/0x7b
30 [<ffffffff8112667a>] sys_close+0xf8/0x13d
31 [<ffffffff814ae882>] system_call_fastpath+0x16/0x1b
33 -> #0 (local_softirq_lock){+.+...}:
34 [<ffffffff81082ecc>] __lock_acquire+0xacc/0xdc8
35 [<ffffffff810836e5>] lock_acquire+0x103/0x12e
36 [<ffffffff814a7e40>] _raw_spin_lock+0x3b/0x4a
37 [<ffffffff81056d12>] __local_lock+0x25/0x68
38 [<ffffffff81056d8b>] local_bh_disable+0x36/0x3b
39 [<ffffffff814a7fc4>] _raw_write_lock_bh+0x16/0x4f
40 [<ffffffff81433c38>] tcp_close+0x159/0x355
41 [<ffffffff81453c99>] inet_release+0xc3/0xcd
42 [<ffffffff813dff3f>] sock_release+0x1f/0x74
43 [<ffffffff813dffbb>] sock_close+0x27/0x2b
44 [<ffffffff81129c63>] fput+0x11d/0x1e3
45 [<ffffffff81126577>] filp_close+0x70/0x7b
46 [<ffffffff8112667a>] sys_close+0xf8/0x13d
47 [<ffffffff814ae882>] system_call_fastpath+0x16/0x1b
49 other info that might help us debug this:
51 Possible unsafe locking scenario:
55 lock(sk_lock-AF_INET);
56 lock(local_softirq_lock);
57 lock(sk_lock-AF_INET);
58 lock(local_softirq_lock);
62 1 lock held by ip/1104:
63 #0: (sk_lock-AF_INET){+.+...}, at: [<ffffffff81433308>] lock_sock+0x10/0x12
66 Pid: 1104, comm: ip Not tainted 3.0.0-rc3+ #26
68 [<ffffffff81081649>] print_circular_bug+0x1f8/0x209
69 [<ffffffff81082ecc>] __lock_acquire+0xacc/0xdc8
70 [<ffffffff81056d12>] ? __local_lock+0x25/0x68
71 [<ffffffff810836e5>] lock_acquire+0x103/0x12e
72 [<ffffffff81056d12>] ? __local_lock+0x25/0x68
73 [<ffffffff81046c75>] ? get_parent_ip+0x11/0x41
74 [<ffffffff814a7e40>] _raw_spin_lock+0x3b/0x4a
75 [<ffffffff81056d12>] ? __local_lock+0x25/0x68
76 [<ffffffff81046c8c>] ? get_parent_ip+0x28/0x41
77 [<ffffffff81056d12>] __local_lock+0x25/0x68
78 [<ffffffff81056d8b>] local_bh_disable+0x36/0x3b
79 [<ffffffff81433308>] ? lock_sock+0x10/0x12
80 [<ffffffff814a7fc4>] _raw_write_lock_bh+0x16/0x4f
81 [<ffffffff81433c38>] tcp_close+0x159/0x355
82 [<ffffffff81453c99>] inet_release+0xc3/0xcd
83 [<ffffffff813dff3f>] sock_release+0x1f/0x74
84 [<ffffffff813dffbb>] sock_close+0x27/0x2b
85 [<ffffffff81129c63>] fput+0x11d/0x1e3
86 [<ffffffff81126577>] filp_close+0x70/0x7b
87 [<ffffffff8112667a>] sys_close+0xf8/0x13d
88 [<ffffffff814ae882>] system_call_fastpath+0x16/0x1b
90 Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
92 net/core/sock.c | 3 +--
93 1 file changed, 1 insertion(+), 2 deletions(-)
95 diff --git a/net/core/sock.c b/net/core/sock.c
96 index f367df3..d578b70 100644
99 @@ -2439,12 +2439,11 @@ void lock_sock_nested(struct sock *sk, int subclass)
100 if (sk->sk_lock.owned)
102 sk->sk_lock.owned = 1;
103 - spin_unlock(&sk->sk_lock.slock);
104 + spin_unlock_bh(&sk->sk_lock.slock);
106 * The sk_lock has mutex_lock() semantics here:
108 mutex_acquire(&sk->sk_lock.dep_map, subclass, 0, _RET_IP_);
111 EXPORT_SYMBOL(lock_sock_nested);