l2tp: fix a lockdep splat
Fixes following lockdep splat :
[ 1614.734896] =============================================
[ 1614.734898] [ INFO: possible recursive locking detected ]
[ 1614.734901] 3.6.0-rc3+ #782 Not tainted
[ 1614.734903] ---------------------------------------------
[ 1614.734905] swapper/11/0 is trying to acquire lock:
[ 1614.734907] (slock-AF_INET){+.-...}, at: [<
ffffffffa0209d72>] l2tp_xmit_skb+0x172/0xa50 [l2tp_core]
[ 1614.734920]
[ 1614.734920] but task is already holding lock:
[ 1614.734922] (slock-AF_INET){+.-...}, at: [<
ffffffff815fce23>] tcp_v4_err+0x163/0x6b0
[ 1614.734932]
[ 1614.734932] other info that might help us debug this:
[ 1614.734935] Possible unsafe locking scenario:
[ 1614.734935]
[ 1614.734937] CPU0
[ 1614.734938] ----
[ 1614.734940] lock(slock-AF_INET);
[ 1614.734943] lock(slock-AF_INET);
[ 1614.734946]
[ 1614.734946] *** DEADLOCK ***
[ 1614.734946]
[ 1614.734949] May be due to missing lock nesting notation
[ 1614.734949]
[ 1614.734952] 7 locks held by swapper/11/0:
[ 1614.734954] #0: (rcu_read_lock){.+.+..}, at: [<
ffffffff81592801>] __netif_receive_skb+0x251/0xd00
[ 1614.734964] #1: (rcu_read_lock){.+.+..}, at: [<
ffffffff815d319c>] ip_local_deliver_finish+0x4c/0x4e0
[ 1614.734972] #2: (rcu_read_lock){.+.+..}, at: [<
ffffffff8160d116>] icmp_socket_deliver+0x46/0x230
[ 1614.734982] #3: (slock-AF_INET){+.-...}, at: [<
ffffffff815fce23>] tcp_v4_err+0x163/0x6b0
[ 1614.734989] #4: (rcu_read_lock){.+.+..}, at: [<
ffffffff815da240>] ip_queue_xmit+0x0/0x680
[ 1614.734997] #5: (rcu_read_lock_bh){.+....}, at: [<
ffffffff815d9925>] ip_finish_output+0x135/0x890
[ 1614.735004] #6: (rcu_read_lock_bh){.+....}, at: [<
ffffffff81595680>] dev_queue_xmit+0x0/0xe00
[ 1614.735012]
[ 1614.735012] stack backtrace:
[ 1614.735016] Pid: 0, comm: swapper/11 Not tainted 3.6.0-rc3+ #782
[ 1614.735018] Call Trace:
[ 1614.735020] <IRQ> [<
ffffffff810a50ac>] __lock_acquire+0x144c/0x1b10
[ 1614.735033] [<
ffffffff810a334b>] ? check_usage+0x9b/0x4d0
[ 1614.735037] [<
ffffffff810a6762>] ? mark_held_locks+0x82/0x130
[ 1614.735042] [<
ffffffff810a5df0>] lock_acquire+0x90/0x200
[ 1614.735047] [<
ffffffffa0209d72>] ? l2tp_xmit_skb+0x172/0xa50 [l2tp_core]
[ 1614.735051] [<
ffffffff810a69ad>] ? trace_hardirqs_on+0xd/0x10
[ 1614.735060] [<
ffffffff81749b31>] _raw_spin_lock+0x41/0x50
[ 1614.735065] [<
ffffffffa0209d72>] ? l2tp_xmit_skb+0x172/0xa50 [l2tp_core]
[ 1614.735069] [<
ffffffffa0209d72>] l2tp_xmit_skb+0x172/0xa50 [l2tp_core]
[ 1614.735075] [<
ffffffffa014f7f2>] l2tp_eth_dev_xmit+0x32/0x60 [l2tp_eth]
[ 1614.735079] [<
ffffffff81595112>] dev_hard_start_xmit+0x502/0xa70
[ 1614.735083] [<
ffffffff81594c6e>] ? dev_hard_start_xmit+0x5e/0xa70
[ 1614.735087] [<
ffffffff815957c1>] ? dev_queue_xmit+0x141/0xe00
[ 1614.735093] [<
ffffffff815b622e>] sch_direct_xmit+0xfe/0x290
[ 1614.735098] [<
ffffffff81595865>] dev_queue_xmit+0x1e5/0xe00
[ 1614.735102] [<
ffffffff81595680>] ? dev_hard_start_xmit+0xa70/0xa70
[ 1614.735106] [<
ffffffff815b4daa>] ? eth_header+0x3a/0xf0
[ 1614.735111] [<
ffffffff8161d33e>] ? fib_get_table+0x2e/0x280
[ 1614.735117] [<
ffffffff8160a7e2>] arp_xmit+0x22/0x60
[ 1614.735121] [<
ffffffff8160a863>] arp_send+0x43/0x50
[ 1614.735125] [<
ffffffff8160b82f>] arp_solicit+0x18f/0x450
[ 1614.735132] [<
ffffffff8159d9da>] neigh_probe+0x4a/0x70
[ 1614.735137] [<
ffffffff815a191a>] __neigh_event_send+0xea/0x300
[ 1614.735141] [<
ffffffff815a1c93>] neigh_resolve_output+0x163/0x260
[ 1614.735146] [<
ffffffff815d9cf5>] ip_finish_output+0x505/0x890
[ 1614.735150] [<
ffffffff815d9925>] ? ip_finish_output+0x135/0x890
[ 1614.735154] [<
ffffffff815dae79>] ip_output+0x59/0xf0
[ 1614.735158] [<
ffffffff815da1cd>] ip_local_out+0x2d/0xa0
[ 1614.735162] [<
ffffffff815da403>] ip_queue_xmit+0x1c3/0x680
[ 1614.735165] [<
ffffffff815da240>] ? ip_local_out+0xa0/0xa0
[ 1614.735172] [<
ffffffff815f4402>] tcp_transmit_skb+0x402/0xa60
[ 1614.735177] [<
ffffffff815f5a11>] tcp_retransmit_skb+0x1a1/0x620
[ 1614.735181] [<
ffffffff815f7e93>] tcp_retransmit_timer+0x393/0x960
[ 1614.735185] [<
ffffffff815fce23>] ? tcp_v4_err+0x163/0x6b0
[ 1614.735189] [<
ffffffff815fd317>] tcp_v4_err+0x657/0x6b0
[ 1614.735194] [<
ffffffff8160d116>] ? icmp_socket_deliver+0x46/0x230
[ 1614.735199] [<
ffffffff8160d19e>] icmp_socket_deliver+0xce/0x230
[ 1614.735203] [<
ffffffff8160d116>] ? icmp_socket_deliver+0x46/0x230
[ 1614.735208] [<
ffffffff8160d464>] icmp_unreach+0xe4/0x2c0
[ 1614.735213] [<
ffffffff8160e520>] icmp_rcv+0x350/0x4a0
[ 1614.735217] [<
ffffffff815d3285>] ip_local_deliver_finish+0x135/0x4e0
[ 1614.735221] [<
ffffffff815d319c>] ? ip_local_deliver_finish+0x4c/0x4e0
[ 1614.735225] [<
ffffffff815d3ffa>] ip_local_deliver+0x4a/0x90
[ 1614.735229] [<
ffffffff815d37b7>] ip_rcv_finish+0x187/0x730
[ 1614.735233] [<
ffffffff815d425d>] ip_rcv+0x21d/0x300
[ 1614.735237] [<
ffffffff81592a1b>] __netif_receive_skb+0x46b/0xd00
[ 1614.735241] [<
ffffffff81592801>] ? __netif_receive_skb+0x251/0xd00
[ 1614.735245] [<
ffffffff81593368>] process_backlog+0xb8/0x180
[ 1614.735249] [<
ffffffff81593cf9>] net_rx_action+0x159/0x330
[ 1614.735257] [<
ffffffff810491f0>] __do_softirq+0xd0/0x3e0
[ 1614.735264] [<
ffffffff8109ed24>] ? tick_program_event+0x24/0x30
[ 1614.735270] [<
ffffffff8175419c>] call_softirq+0x1c/0x30
[ 1614.735278] [<
ffffffff8100425d>] do_softirq+0x8d/0xc0
[ 1614.735282] [<
ffffffff8104983e>] irq_exit+0xae/0xe0
[ 1614.735287] [<
ffffffff8175494e>] smp_apic_timer_interrupt+0x6e/0x99
[ 1614.735291] [<
ffffffff81753a1c>] apic_timer_interrupt+0x6c/0x80
[ 1614.735293] <EOI> [<
ffffffff810a14ad>] ? trace_hardirqs_off+0xd/0x10
[ 1614.735306] [<
ffffffff81336f85>] ? intel_idle+0xf5/0x150
[ 1614.735310] [<
ffffffff81336f7e>] ? intel_idle+0xee/0x150
[ 1614.735317] [<
ffffffff814e6ea9>] cpuidle_enter+0x19/0x20
[ 1614.735321] [<
ffffffff814e7538>] cpuidle_idle_call+0xa8/0x630
[ 1614.735327] [<
ffffffff8100c1ba>] cpu_idle+0x8a/0xe0
[ 1614.735333] [<
ffffffff8173762e>] start_secondary+0x220/0x222
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>