From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from forward-corp1g.mail.yandex.net ([95.108.253.251]:35890 "EHLO forward-corp1g.mail.yandex.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932251AbbFJKkq (ORCPT ); Wed, 10 Jun 2015 06:40:46 -0400 Subject: [PATCH 3.10.y 0/2] ipv6: avoid soft lockups in fib6_run_gc() From: Konstantin Khlebnikov To: stable@vger.kernel.org Cc: Michal Kubecek , netdev@vger.kernel.org, "David S. Miller" Date: Wed, 10 Jun 2015 13:40:42 +0300 Message-ID: <20150610103926.3791.22866.stgit@buzz> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Sender: stable-owner@vger.kernel.org List-ID: Two patches from 3.11 which are missing in 3.10.y I've just seen livelock in 3.10.69+ where all cpus are stuck in fib6_run_gc() <4>[2919865.977745] Call Trace: <4>[2919865.977748] <4>[2919865.977754] [] _raw_spin_lock_bh+0x1e/0x30 <4>[2919865.977759] [] fib6_run_gc+0x28/0x100 <4>[2919865.977762] [] ip6_dst_gc+0xcb/0x110 <4>[2919865.977767] [] dst_alloc+0x163/0x180 <4>[2919865.977770] [] ip6_rt_copy+0x44/0x350 <4>[2919865.977773] [] ip6_pol_route.isra.46+0x347/0x460 <4>[2919865.977776] [] ip6_pol_route_output+0x2a/0x30 <4>[2919865.977781] [] fib6_rule_action+0xd1/0x200 <4>[2919865.977783] [] ? ip6_pol_route_input+0x30/0x30 <4>[2919865.977788] [] ? pfifo_fast_enqueue+0x8d/0xa0 <4>[2919865.977791] [] fib_rules_lookup+0xd5/0x150 <4>[2919865.977795] [] fib6_rule_lookup+0x44/0x80 <4>[2919865.977797] [] ? ip6_pol_route_input+0x30/0x30 <4>[2919865.977800] [] ip6_route_output+0x73/0xb0 <4>[2919865.977804] [] ip6_dst_lookup_tail+0xdb/0xf0 <4>[2919865.977807] [] ip6_dst_lookup_flow+0x3d/0xa0 <4>[2919865.977811] [] inet6_csk_route_socket+0x160/0x200 <4>[2919865.977814] [] inet6_csk_xmit+0x42/0xd0 <4>[2919865.977819] [] tcp_transmit_skb+0x42b/0x8a0 <4>[2919865.977823] [] tcp_xmit_probe_skb+0x96/0xb0 <4>[2919865.977826] [] tcp_write_wakeup+0x59/0x180 <4>[2919865.977830] [] tcp_keepalive_timer+0x178/0x260 <4>[2919865.977833] [] ? tcp_write_timer+0x46/0x80 <4>[2919865.977836] [] ? tcp_out_of_resources+0xc0/0xc0 <4>[2919865.977840] [] call_timer_fn+0x46/0x160 <4>[2919865.977842] [] ? cascade+0x7c/0xa0 <4>[2919865.977845] [] run_timer_softirq+0x25d/0x290 <4>[2919865.977849] [] ? timerqueue_add+0x64/0xb0 <4>[2919865.977852] [] ? tcp_out_of_resources+0xc0/0xc0 <4>[2919865.977858] [] ? ktime_get+0x54/0xe0 <4>[2919865.977861] [] __do_softirq+0xd8/0x270 <4>[2919865.977865] [] ? tick_program_event+0x24/0x30 <4>[2919865.977870] [] ? hrtimer_interrupt+0x185/0x270 <4>[2919865.977874] [] call_softirq+0x1c/0x30 <4>[2919865.977878] [] do_softirq+0x65/0xa0 <4>[2919865.977881] [] irq_exit+0x8e/0xb0 <4>[2919865.977884] [] smp_apic_timer_interrupt+0x6e/0x99 <4>[2919865.977887] [] apic_timer_interrupt+0x6d/0x80 --- Michal Kubeček (2): ipv6: prevent fib6_run_gc() contention ipv6: update ip6_rt_last_gc every time GC is run include/net/ip6_fib.h | 2 +- net/ipv6/ip6_fib.c | 25 +++++++++++++------------ net/ipv6/ndisc.c | 4 ++-- net/ipv6/route.c | 8 +++----- 4 files changed, 19 insertions(+), 20 deletions(-) -- Konstantin