Beatrice Barbe reported a reproducible crash after creating large numbers of nested GRE tunnels and then pinging with the source address forced. I was able to reproduce this using net-2.6. I'm attaching the kernel config I used and a script to reproduce this based on the script she provided. The magic number of tunnels to create is apparently 37. With lockdep enabled, I get the following output: ============================================= [ INFO: possible recursive locking detected ] 2.6.36-rc7-00040-gb0057c5 #5 --------------------------------------------- ping/2199 is trying to acquire lock: (_xmit_IPGRE){+.....}, at: [] dev_queue_xmit+0x37e/0x454 but task is already holding lock: (_xmit_IPGRE){+.....}, at: [] dev_queue_xmit+0x37e/0x454 other info that might help us debug this: 4 locks held by ping/2199: #0: (sk_lock-AF_INET){+.+.+.}, at: [] raw_sendmsg+0x590/0x64c #1: (rcu_read_lock_bh){.+....}, at: [] dev_queue_xmit+0x0/0x454 #2: (_xmit_IPGRE){+.....}, at: [] dev_queue_xmit+0x37e/0x454 #3: (rcu_read_lock_bh){.+....}, at: [] dev_queue_xmit+0x0/0x454 stack backtrace: Pid: 2199, comm: ping Not tainted 2.6.36-rc7-00040-gb0057c5 #5 Call Trace: [] ? printk+0xf/0x13 [] __lock_acquire+0xbda/0x1311 [] ? __lock_acquire+0x5c3/0x1311 [] lock_acquire+0x59/0x77 [] ? dev_queue_xmit+0x37e/0x454 [] _raw_spin_lock+0x1b/0x2a [] ? dev_queue_xmit+0x37e/0x454 [] dev_queue_xmit+0x37e/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ? ip_append_data+0x536/0x7dc [] ip_finish_output+0x29d/0x2c7 [] ? ip_generic_getfrag+0x0/0x8a [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ip_push_pending_frames+0x260/0x2ad [] raw_sendmsg+0x5cf/0x64c [] inet_sendmsg+0x46/0x4f [] sock_sendmsg+0xa4/0xba [] ? might_fault+0x35/0x6f [] ? might_fault+0x35/0x6f [] ? verify_iovec+0x3e/0x6a [] sys_sendmsg+0x149/0x196 [] ? unlock_page+0x3f/0x42 [] ? lock_release_non_nested+0x86/0x221 [] ? might_fault+0x35/0x6f [] ? might_fault+0x35/0x6f [] sys_socketcall+0x146/0x18b [] ? trace_hardirqs_on_thunk+0xc/0x10 [] syscall_call+0x7/0xb ------------[ cut here ]------------ WARNING: at kernel/softirq.c:143 local_bh_enable_ip+0x39/0xa5() Hardware name: Bochs Pid: 2199, comm: ping Not tainted 2.6.36-rc7-00040-gb0057c5 #5 Call Trace: [] warn_slowpath_common+0x60/0x75 [] ? local_bh_enable_ip+0x39/0xa5 [] ? rt_intern_hash+0x4da/0x4f9 [] warn_slowpath_null+0xf/0x13 [] local_bh_enable_ip+0x39/0xa5 [] _raw_spin_unlock_bh+0x25/0x28 [] rt_intern_hash+0x4da/0x4f9 [] __ip_route_output_key+0x806/0x860 [] ip_route_output_flow+0xe/0x3e [] ip_route_output_key+0xc/0xe [] ipgre_tunnel_xmit+0x1ac/0x757 [] ? dev_queue_xmit+0x37e/0x454 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ip_finish_output+0x29d/0x2c7 [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ipgre_tunnel_xmit+0x6b8/0x757 [] ? ip_rt_update_pmtu+0x0/0x60 [] dev_hard_start_xmit+0x33a/0x428 [] dev_queue_xmit+0x39d/0x454 [] ? ip_append_data+0x536/0x7dc [] ip_finish_output+0x29d/0x2c7 [] ? ip_generic_getfrag+0x0/0x8a [] ip_output+0x8a/0x8f [] ip_local_out+0x50/0x53 [] ip_push_pending_frames+0x260/0x2ad [] raw_sendmsg+0x5cf/0x64c [] inet_sendmsg+0x46/0x4f [] sock_sendmsg+0xa4/0xba [] ? might_fault+0x35/0x6f [] ? might_fault+0x35/0x6f [] ? verify_iovec+0x3e/0x6a [] sys_sendmsg+0x149/0x196 [] ? unlock_page+0x3f/0x42 [] ? lock_release_non_nested+0x86/0x221 [] ? might_fault+0x35/0x6f [] ? might_fault+0x35/0x6f [] sys_socketcall+0x146/0x18b [] ? trace_hardirqs_on_thunk+0xc/0x10 [] syscall_call+0x7/0xb Ben. -- Ben Hutchings Once a job is fouled up, anything done to improve it makes it worse.