netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* NFS does not work on linux-next 20140331
@ 2014-03-31 16:14 Fabio Estevam
  2014-03-31 16:21 ` Hannes Frederic Sowa
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Fabio Estevam @ 2014-03-31 16:14 UTC (permalink / raw)
  To: netdev@vger.kernel.org; +Cc: David S. Miller

Hi,

When running linux-next 20140331 I am no longer able to mount NFS on a
mx6qsabresd board:

=================================
[ INFO: inconsistent lock state ]
3.14.0-rc8-next-20140331 #964 Not tainted
---------------------------------
inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
kworker/0:2/50 [HC0[0]:SC0[0]:HE1:SE1] takes:
 (&addrconf_stats->syncp.seq){+.?...}, at: [<8057ca88>] mld_send_initial_cr.par0
{IN-SOFTIRQ-W} state was registered at:
  [<8006366c>] mark_lock+0x140/0x6ac
  [<80063ebc>] __lock_acquire+0x2e4/0x1c00
  [<80065cbc>] lock_acquire+0x68/0x7c
  [<8057bf28>] mld_sendpack+0xec/0x73c
  [<8057cc80>] mld_ifc_timer_expire+0x1e4/0x2e4
  [<8003310c>] call_timer_fn+0x74/0xec
  [<80033a5c>] run_timer_softirq+0x1c4/0x264
  [<8002d3d4>] __do_softirq+0x130/0x278
  [<8002d814>] irq_exit+0xb0/0x104
  [<8000f47c>] handle_IRQ+0x58/0xb8
  [<80008680>] gic_handle_irq+0x30/0x64
  [<800129a4>] __irq_svc+0x44/0x5c
  [<8005f9dc>] cpu_startup_entry+0xfc/0x160
  [<80617a3c>] rest_init+0xb0/0xd8
  [<8083db58>] start_kernel+0x324/0x388
  [<10008074>] 0x10008074
irq event stamp: 62347
hardirqs last  enabled at (62347): [<8002d67c>] __local_bh_enable_ip+0x80/0xe8
hardirqs last disabled at (62345): [<8002d63c>] __local_bh_enable_ip+0x40/0xe8
softirqs last  enabled at (62346): [<80558740>] ip6_finish_output2+0x16c/0x9d8
softirqs last disabled at (62334): [<80558624>] ip6_finish_output2+0x50/0x9d8

other info that might help us debug this:
 Possible unsafe locking scenario:

       CPU0
       ----
  lock(&addrconf_stats->syncp.seq);
  <Interrupt>
    lock(&addrconf_stats->syncp.seq);

 *** DEADLOCK ***

4 locks held by kworker/0:2/50:
 #0:  ("%s"("ipv6_addrconf")){.+.+..}, at: [<8003f2d0>] process_one_work+0x134/4
 #1:  ((&(&ifa->dad_work)->work)){+.+...}, at: [<8003f2d0>] process_one_work+0x4
 #2:  (rtnl_mutex){+.+.+.}, at: [<804e0acc>] rtnl_lock+0x18/0x20
 #3:  (rcu_read_lock){......}, at: [<8057be3c>] mld_sendpack+0x0/0x73c

stack backtrace:
CPU: 0 PID: 50 Comm: kworker/0:2 Not tainted 3.14.0-rc8-next-20140331 #964
Workqueue: ipv6_addrconf addrconf_dad_work
Backtrace:
[<80011cd4>] (dump_backtrace) from [<80011e70>] (show_stack+0x18/0x1c)
 r6:be81c440 r5:00000000 r4:00000000 r3:be81c440
[<80011e58>] (show_stack) from [<8061e054>] (dump_stack+0x88/0xa4)
[<8061dfcc>] (dump_stack) from [<8061bcf8>] (print_usage_bug+0x260/0x2d0)
 r5:80784b0c r4:809aee20
[<8061ba98>] (print_usage_bug) from [<800637c8>] (mark_lock+0x29c/0x6ac)
 r10:80062cc0 r8:00000004 r7:be81c440 r6:00001054 r5:be81c8e8 r4:00000006
[<8006352c>] (mark_lock) from [<80064200>] (__lock_acquire+0x628/0x1c00)
 r10:bf7b755c r9:be82e000 r8:000001ef r7:8098e030 r6:808b3afc r5:be81c440
 r4:80dde8cc r3:00000004
[<80063bd8>] (__lock_acquire) from [<80065cbc>] (lock_acquire+0x68/0x7c)
 r10:808e4e00 r9:00000001 r8:80896d2c r7:00000001 r6:60000013 r5:be82e000
 r4:00000000
[<80065c54>] (lock_acquire) from [<8057c248>] (mld_sendpack+0x40c/0x73c)
 r7:00000000 r6:8057ca88 r5:0000004c r4:bf7b7438
[<8057be3c>] (mld_sendpack) from [<8057ca88>] (mld_send_initial_cr.part.18+0x9c)
 r10:be9d48d0 r9:00000001 r8:00000000 r7:00000001 r6:beb880c0 r5:bebe4668
 r4:00000000
[<8057c9ec>] (mld_send_initial_cr.part.18) from [<8057ffb0>] (ipv6_mc_dad_compl)
 r10:00000000 r8:be9d48d0 r7:be9d2a00 r6:be9d2a20 r5:be8c8000 r4:be9d4800
[<8057ff7c>] (ipv6_mc_dad_complete) from [<805641b8>] (addrconf_dad_completed+0)
 r4:be9d2a00 r3:be81c440
[<805640bc>] (addrconf_dad_completed) from [<8056445c>] (addrconf_dad_work+0x1f)
 r5:be9d2a40 r4:be9d2a74
[<80564260>] (addrconf_dad_work) from [<8003f344>] (process_one_work+0x1a8/0x44)
 r10:bf7b7200 r8:00000000 r7:be82e000 r6:bf7b15c0 r5:be9d2a74 r4:be801c80
[<8003f19c>] (process_one_work) from [<8003f9e4>] (worker_thread+0x124/0x398)
 r10:808eddf6 r9:bf7b15c0 r8:be82e000 r7:be801c98 r6:be82e000 r5:bf7b15f0
 r4:be801c80
[<8003f8c0>] (worker_thread) from [<8004669c>] (kthread+0xd0/0xec)
 r10:00000000 r9:00000000 r8:00000000 r7:8003f8c0 r6:be801c80 r5:be808a40
 r4:00000000
[<800465cc>] (kthread) from [<8000ebe8>] (ret_from_fork+0x14/0x2c)
 r7:00000000 r6:00000000 r5:800465cc r4:be808a40
INFO: rcu_sched detected stalls on CPUs/tasks: {} (detected by 1, t=2102 jiffie)
INFO: Stall ended before state dump start
random: nonblocking pool is initialized
INFO: rcu_sched detected stalls on CPUs/tasks: {} (detected by 0, t=8407 jiffie)
INFO: Stall ended before state dump start
INFO: rcu_sched detected stalls on CPUs/tasks: {} (detected by 3, t=14712 jiffi)
INFO: Stall ended before state dump start

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: NFS does not work on linux-next 20140331
  2014-03-31 16:14 NFS does not work on linux-next 20140331 Fabio Estevam
@ 2014-03-31 16:21 ` Hannes Frederic Sowa
  2014-03-31 16:29 ` Eric Dumazet
  2014-03-31 18:14 ` [PATCH net] ipv6: some ipv6 statistic counters failed to disable bh Hannes Frederic Sowa
  2 siblings, 0 replies; 11+ messages in thread
From: Hannes Frederic Sowa @ 2014-03-31 16:21 UTC (permalink / raw)
  To: Fabio Estevam; +Cc: netdev@vger.kernel.org, David S. Miller

On Mon, Mar 31, 2014 at 01:14:56PM -0300, Fabio Estevam wrote:
> Hi,
> 
> When running linux-next 20140331 I am no longer able to mount NFS on a
> mx6qsabresd board:
> 
> =================================
> [ INFO: inconsistent lock state ]
> 3.14.0-rc8-next-20140331 #964 Not tainted
> ---------------------------------
> inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
> kworker/0:2/50 [HC0[0]:SC0[0]:HE1:SE1] takes:
>  (&addrconf_stats->syncp.seq){+.?...}, at: [<8057ca88>] mld_send_initial_cr.par0
> {IN-SOFTIRQ-W} state was registered at:
>   [<8006366c>] mark_lock+0x140/0x6ac
>   [<80063ebc>] __lock_acquire+0x2e4/0x1c00
>   [<80065cbc>] lock_acquire+0x68/0x7c
>   [<8057bf28>] mld_sendpack+0xec/0x73c
>   [<8057cc80>] mld_ifc_timer_expire+0x1e4/0x2e4
>   [<8003310c>] call_timer_fn+0x74/0xec
>   [<80033a5c>] run_timer_softirq+0x1c4/0x264
>   [<8002d3d4>] __do_softirq+0x130/0x278
>   [<8002d814>] irq_exit+0xb0/0x104
>   [<8000f47c>] handle_IRQ+0x58/0xb8
>   [<80008680>] gic_handle_irq+0x30/0x64
>   [<800129a4>] __irq_svc+0x44/0x5c
>   [<8005f9dc>] cpu_startup_entry+0xfc/0x160
>   [<80617a3c>] rest_init+0xb0/0xd8
>   [<8083db58>] start_kernel+0x324/0x388
>   [<10008074>] 0x10008074
> irq event stamp: 62347
> hardirqs last  enabled at (62347): [<8002d67c>] __local_bh_enable_ip+0x80/0xe8
> hardirqs last disabled at (62345): [<8002d63c>] __local_bh_enable_ip+0x40/0xe8
> softirqs last  enabled at (62346): [<80558740>] ip6_finish_output2+0x16c/0x9d8
> softirqs last disabled at (62334): [<80558624>] ip6_finish_output2+0x50/0x9d8
> 
> other info that might help us debug this:
>  Possible unsafe locking scenario:
> 
>        CPU0
>        ----
>   lock(&addrconf_stats->syncp.seq);
>   <Interrupt>
>     lock(&addrconf_stats->syncp.seq);

Shit, my fault, statistic counters again. Hasn't turned up in my
testing. I cook a patch today.

Thanks,

  Hannes

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: NFS does not work on linux-next 20140331
  2014-03-31 16:14 NFS does not work on linux-next 20140331 Fabio Estevam
  2014-03-31 16:21 ` Hannes Frederic Sowa
@ 2014-03-31 16:29 ` Eric Dumazet
  2014-03-31 16:35   ` Fabio Estevam
  2014-03-31 18:14 ` [PATCH net] ipv6: some ipv6 statistic counters failed to disable bh Hannes Frederic Sowa
  2 siblings, 1 reply; 11+ messages in thread
From: Eric Dumazet @ 2014-03-31 16:29 UTC (permalink / raw)
  To: Fabio Estevam; +Cc: netdev@vger.kernel.org, David S. Miller

On Mon, 2014-03-31 at 13:14 -0300, Fabio Estevam wrote:
> Hi,
> 
> When running linux-next 20140331 I am no longer able to mount NFS on a
> mx6qsabresd board:
> 
> =================================
> [ INFO: inconsistent lock state ]
> 3.14.0-rc8-next-20140331 #964 Not tainted
> ---------------------------------
> inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
> kworker/0:2/50 [HC0[0]:SC0[0]:HE1:SE1] takes:
>  (&addrconf_stats->syncp.seq){+.?...}, at: [<8057ca88>] mld_send_initial_cr.par0
> {IN-SOFTIRQ-W} state was registered at:
>   [<8006366c>] mark_lock+0x140/0x6ac
>   [<80063ebc>] __lock_acquire+0x2e4/0x1c00
>   [<80065cbc>] lock_acquire+0x68/0x7c
>   [<8057bf28>] mld_sendpack+0xec/0x73c
>   [<8057cc80>] mld_ifc_timer_expire+0x1e4/0x2e4
>   [<8003310c>] call_timer_fn+0x74/0xec
>   [<80033a5c>] run_timer_softirq+0x1c4/0x264
>   [<8002d3d4>] __do_softirq+0x130/0x278
>   [<8002d814>] irq_exit+0xb0/0x104
>   [<8000f47c>] handle_IRQ+0x58/0xb8
>   [<80008680>] gic_handle_irq+0x30/0x64
>   [<800129a4>] __irq_svc+0x44/0x5c
>   [<8005f9dc>] cpu_startup_entry+0xfc/0x160
>   [<80617a3c>] rest_init+0xb0/0xd8
>   [<8083db58>] start_kernel+0x324/0x388
>   [<10008074>] 0x10008074
> irq event stamp: 62347
> hardirqs last  enabled at (62347): [<8002d67c>] __local_bh_enable_ip+0x80/0xe8
> hardirqs last disabled at (62345): [<8002d63c>] __local_bh_enable_ip+0x40/0xe8
> softirqs last  enabled at (62346): [<80558740>] ip6_finish_output2+0x16c/0x9d8
> softirqs last disabled at (62334): [<80558624>] ip6_finish_output2+0x50/0x9d8
> 
> other info that might help us debug this:
>  Possible unsafe locking scenario:
> 
>        CPU0
>        ----
>   lock(&addrconf_stats->syncp.seq);
>   <Interrupt>
>     lock(&addrconf_stats->syncp.seq);
> 
>  *** DEADLOCK ***
> 
> 4 locks held by kworker/0:2/50:
>  #0:  ("%s"("ipv6_addrconf")){.+.+..}, at: [<8003f2d0>] process_one_work+0x134/4
>  #1:  ((&(&ifa->dad_work)->work)){+.+...}, at: [<8003f2d0>] process_one_work+0x4
>  #2:  (rtnl_mutex){+.+.+.}, at: [<804e0acc>] rtnl_lock+0x18/0x20
>  #3:  (rcu_read_lock){......}, at: [<8057be3c>] mld_sendpack+0x0/0x73c
> 
> stack backtrace:
> CPU: 0 PID: 50 Comm: kworker/0:2 Not tainted 3.14.0-rc8-next-20140331 #964
> Workqueue: ipv6_addrconf addrconf_dad_work
> Backtrace:
> [<80011cd4>] (dump_backtrace) from [<80011e70>] (show_stack+0x18/0x1c)
>  r6:be81c440 r5:00000000 r4:00000000 r3:be81c440
> [<80011e58>] (show_stack) from [<8061e054>] (dump_stack+0x88/0xa4)
> [<8061dfcc>] (dump_stack) from [<8061bcf8>] (print_usage_bug+0x260/0x2d0)
>  r5:80784b0c r4:809aee20
> [<8061ba98>] (print_usage_bug) from [<800637c8>] (mark_lock+0x29c/0x6ac)
>  r10:80062cc0 r8:00000004 r7:be81c440 r6:00001054 r5:be81c8e8 r4:00000006
> [<8006352c>] (mark_lock) from [<80064200>] (__lock_acquire+0x628/0x1c00)
>  r10:bf7b755c r9:be82e000 r8:000001ef r7:8098e030 r6:808b3afc r5:be81c440
>  r4:80dde8cc r3:00000004
> [<80063bd8>] (__lock_acquire) from [<80065cbc>] (lock_acquire+0x68/0x7c)
>  r10:808e4e00 r9:00000001 r8:80896d2c r7:00000001 r6:60000013 r5:be82e000
>  r4:00000000
> [<80065c54>] (lock_acquire) from [<8057c248>] (mld_sendpack+0x40c/0x73c)
>  r7:00000000 r6:8057ca88 r5:0000004c r4:bf7b7438
> [<8057be3c>] (mld_sendpack) from [<8057ca88>] (mld_send_initial_cr.part.18+0x9c)
>  r10:be9d48d0 r9:00000001 r8:00000000 r7:00000001 r6:beb880c0 r5:bebe4668
>  r4:00000000
> [<8057c9ec>] (mld_send_initial_cr.part.18) from [<8057ffb0>] (ipv6_mc_dad_compl)
>  r10:00000000 r8:be9d48d0 r7:be9d2a00 r6:be9d2a20 r5:be8c8000 r4:be9d4800
> [<8057ff7c>] (ipv6_mc_dad_complete) from [<805641b8>] (addrconf_dad_completed+0)
>  r4:be9d2a00 r3:be81c440
> [<805640bc>] (addrconf_dad_completed) from [<8056445c>] (addrconf_dad_work+0x1f)
>  r5:be9d2a40 r4:be9d2a74
> [<80564260>] (addrconf_dad_work) from [<8003f344>] (process_one_work+0x1a8/0x44)
>  r10:bf7b7200 r8:00000000 r7:be82e000 r6:bf7b15c0 r5:be9d2a74 r4:be801c80
> [<8003f19c>] (process_one_work) from [<8003f9e4>] (worker_thread+0x124/0x398)
>  r10:808eddf6 r9:bf7b15c0 r8:be82e000 r7:be801c98 r6:be82e000 r5:bf7b15f0
>  r4:be801c80
> [<8003f8c0>] (worker_thread) from [<8004669c>] (kthread+0xd0/0xec)
>  r10:00000000 r9:00000000 r8:00000000 r7:8003f8c0 r6:be801c80 r5:be808a40
>  r4:00000000
> [<800465cc>] (kthread) from [<8000ebe8>] (ret_from_fork+0x14/0x2c)
>  r7:00000000 r6:00000000 r5:800465cc r4:be808a40
> INFO: rcu_sched detected stalls on CPUs/tasks: {} (detected by 1, t=2102 jiffie)
> INFO: Stall ended before state dump start
> random: nonblocking pool is initialized
> INFO: rcu_sched detected stalls on CPUs/tasks: {} (detected by 0, t=8407 jiffie)
> INFO: Stall ended before state dump start
> INFO: rcu_sched detected stalls on CPUs/tasks: {} (detected by 3, t=14712 jiffi)
> INFO: Stall ended before state dump start
> --

Hi Fabio

Could you try the following patch ?

diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
index e1e47350784b..74a774af8265 100644
--- a/net/ipv6/mcast.c
+++ b/net/ipv6/mcast.c
@@ -1588,7 +1588,7 @@ static void mld_sendpack(struct sk_buff *skb)
 
 	rcu_read_lock();
 	idev = __in6_dev_get(skb->dev);
-	IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUT, skb->len);
+	IP6_UPD_PO_STATS_BH(net, idev, IPSTATS_MIB_OUT, skb->len);
 
 	payload_len = (skb_tail_pointer(skb) - skb_network_header(skb)) -
 		sizeof(*pip6);

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: NFS does not work on linux-next 20140331
  2014-03-31 16:29 ` Eric Dumazet
@ 2014-03-31 16:35   ` Fabio Estevam
  2014-03-31 16:43     ` Hannes Frederic Sowa
  2014-03-31 16:47     ` Eric Dumazet
  0 siblings, 2 replies; 11+ messages in thread
From: Fabio Estevam @ 2014-03-31 16:35 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: netdev@vger.kernel.org, David S. Miller

Hi Eric,

On Mon, Mar 31, 2014 at 1:29 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:

> Hi Fabio
>
> Could you try the following patch ?
>
> diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
> index e1e47350784b..74a774af8265 100644
> --- a/net/ipv6/mcast.c
> +++ b/net/ipv6/mcast.c
> @@ -1588,7 +1588,7 @@ static void mld_sendpack(struct sk_buff *skb)
>
>         rcu_read_lock();
>         idev = __in6_dev_get(skb->dev);
> -       IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUT, skb->len);
> +       IP6_UPD_PO_STATS_BH(net, idev, IPSTATS_MIB_OUT, skb->len);

Thanks for the suggestion, but still get the same problem.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: NFS does not work on linux-next 20140331
  2014-03-31 16:35   ` Fabio Estevam
@ 2014-03-31 16:43     ` Hannes Frederic Sowa
  2014-03-31 16:50       ` Fabio Estevam
  2014-03-31 16:47     ` Eric Dumazet
  1 sibling, 1 reply; 11+ messages in thread
From: Hannes Frederic Sowa @ 2014-03-31 16:43 UTC (permalink / raw)
  To: Fabio Estevam; +Cc: Eric Dumazet, netdev@vger.kernel.org, David S. Miller

On Mon, Mar 31, 2014 at 01:35:48PM -0300, Fabio Estevam wrote:
> Hi Eric,
> 
> On Mon, Mar 31, 2014 at 1:29 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> 
> > Hi Fabio
> >
> > Could you try the following patch ?
> >
> > diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
> > index e1e47350784b..74a774af8265 100644
> > --- a/net/ipv6/mcast.c
> > +++ b/net/ipv6/mcast.c
> > @@ -1588,7 +1588,7 @@ static void mld_sendpack(struct sk_buff *skb)
> >
> >         rcu_read_lock();
> >         idev = __in6_dev_get(skb->dev);
> > -       IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUT, skb->len);
> > +       IP6_UPD_PO_STATS_BH(net, idev, IPSTATS_MIB_OUT, skb->len);
> 
> Thanks for the suggestion, but still get the same problem.

Would you be able to quickly test this one?

diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
index e1e4735..08b367c 100644
--- a/net/ipv6/mcast.c
+++ b/net/ipv6/mcast.c
@@ -1620,11 +1620,12 @@ static void mld_sendpack(struct sk_buff *skb)
 		      dst_output);
 out:
 	if (!err) {
-		ICMP6MSGOUT_INC_STATS_BH(net, idev, ICMPV6_MLD2_REPORT);
-		ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTMSGS);
-		IP6_UPD_PO_STATS_BH(net, idev, IPSTATS_MIB_OUTMCAST, payload_len);
-	} else
-		IP6_INC_STATS_BH(net, idev, IPSTATS_MIB_OUTDISCARDS);
+		ICMP6MSGOUT_INC_STATS(net, idev, ICMPV6_MLD2_REPORT);
+		ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTMSGS);
+		IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUTMCAST, payload_len);
+	} else {
+		IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS);
+	}
 
 	rcu_read_unlock();
 	return;

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: NFS does not work on linux-next 20140331
  2014-03-31 16:35   ` Fabio Estevam
  2014-03-31 16:43     ` Hannes Frederic Sowa
@ 2014-03-31 16:47     ` Eric Dumazet
  1 sibling, 0 replies; 11+ messages in thread
From: Eric Dumazet @ 2014-03-31 16:47 UTC (permalink / raw)
  To: Fabio Estevam; +Cc: netdev@vger.kernel.org, David S. Miller

On Mon, 2014-03-31 at 13:35 -0300, Fabio Estevam wrote:
> Hi Eric,
> 
> On Mon, Mar 31, 2014 at 1:29 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> 
> > Hi Fabio
> >
> > Could you try the following patch ?
> >
> > diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
> > index e1e47350784b..74a774af8265 100644
> > --- a/net/ipv6/mcast.c
> > +++ b/net/ipv6/mcast.c
> > @@ -1588,7 +1588,7 @@ static void mld_sendpack(struct sk_buff *skb)
> >
> >         rcu_read_lock();
> >         idev = __in6_dev_get(skb->dev);
> > -       IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUT, skb->len);
> > +       IP6_UPD_PO_STATS_BH(net, idev, IPSTATS_MIB_OUT, skb->len);
> 
> Thanks for the suggestion, but still get the same problem.

Arg, I reversed the patch , problem is that we can be called from
process context, not from softirq

diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
index e1e47350784b..11a8d352c6b4 100644
--- a/net/ipv6/mcast.c
+++ b/net/ipv6/mcast.c
@@ -1620,12 +1620,12 @@ static void mld_sendpack(struct sk_buff *skb)
 		      dst_output);
 out:
 	if (!err) {
-		ICMP6MSGOUT_INC_STATS_BH(net, idev, ICMPV6_MLD2_REPORT);
-		ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTMSGS);
-		IP6_UPD_PO_STATS_BH(net, idev, IPSTATS_MIB_OUTMCAST, payload_len);
-	} else
-		IP6_INC_STATS_BH(net, idev, IPSTATS_MIB_OUTDISCARDS);
-
+		ICMP6MSGOUT_INC_STATS(net, idev, ICMPV6_MLD2_REPORT);
+		ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTMSGS);
+		IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUTMCAST, payload_len);
+	} else {
+		IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS);
+	}
 	rcu_read_unlock();
 	return;
 

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: NFS does not work on linux-next 20140331
  2014-03-31 16:43     ` Hannes Frederic Sowa
@ 2014-03-31 16:50       ` Fabio Estevam
  2014-03-31 16:54         ` Hannes Frederic Sowa
  0 siblings, 1 reply; 11+ messages in thread
From: Fabio Estevam @ 2014-03-31 16:50 UTC (permalink / raw)
  To: Fabio Estevam, Eric Dumazet, netdev@vger.kernel.org,
	David S. Miller

On Mon, Mar 31, 2014 at 1:43 PM, Hannes Frederic Sowa
<hannes@stressinduktion.org> wrote:

> Would you be able to quickly test this one?
>
> diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
> index e1e4735..08b367c 100644
> --- a/net/ipv6/mcast.c
> +++ b/net/ipv6/mcast.c
> @@ -1620,11 +1620,12 @@ static void mld_sendpack(struct sk_buff *skb)
>                       dst_output);
>  out:
>         if (!err) {
> -               ICMP6MSGOUT_INC_STATS_BH(net, idev, ICMPV6_MLD2_REPORT);
> -               ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTMSGS);
> -               IP6_UPD_PO_STATS_BH(net, idev, IPSTATS_MIB_OUTMCAST, payload_len);
> -       } else
> -               IP6_INC_STATS_BH(net, idev, IPSTATS_MIB_OUTDISCARDS);
> +               ICMP6MSGOUT_INC_STATS(net, idev, ICMPV6_MLD2_REPORT);
> +               ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTMSGS);
> +               IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUTMCAST, payload_len);
> +       } else {
> +               IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS);
> +       }

Thanks, Hannes. This makes NFS-mount to work fine again:

Tested-by: Fabio Estevam <fabio.estevam@freescale.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: NFS does not work on linux-next 20140331
  2014-03-31 16:50       ` Fabio Estevam
@ 2014-03-31 16:54         ` Hannes Frederic Sowa
  2014-03-31 17:41           ` Eric Dumazet
  0 siblings, 1 reply; 11+ messages in thread
From: Hannes Frederic Sowa @ 2014-03-31 16:54 UTC (permalink / raw)
  To: Fabio Estevam; +Cc: Eric Dumazet, netdev@vger.kernel.org, David S. Miller

On Mon, Mar 31, 2014 at 01:50:58PM -0300, Fabio Estevam wrote:
> On Mon, Mar 31, 2014 at 1:43 PM, Hannes Frederic Sowa
> <hannes@stressinduktion.org> wrote:
> 
> > Would you be able to quickly test this one?
> >
> > diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
> > index e1e4735..08b367c 100644
> > --- a/net/ipv6/mcast.c
> > +++ b/net/ipv6/mcast.c
> > @@ -1620,11 +1620,12 @@ static void mld_sendpack(struct sk_buff *skb)
> >                       dst_output);
> >  out:
> >         if (!err) {
> > -               ICMP6MSGOUT_INC_STATS_BH(net, idev, ICMPV6_MLD2_REPORT);
> > -               ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTMSGS);
> > -               IP6_UPD_PO_STATS_BH(net, idev, IPSTATS_MIB_OUTMCAST, payload_len);
> > -       } else
> > -               IP6_INC_STATS_BH(net, idev, IPSTATS_MIB_OUTDISCARDS);
> > +               ICMP6MSGOUT_INC_STATS(net, idev, ICMPV6_MLD2_REPORT);
> > +               ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTMSGS);
> > +               IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUTMCAST, payload_len);
> > +       } else {
> > +               IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS);
> > +       }
> 
> Thanks, Hannes. This makes NFS-mount to work fine again:
> 
> Tested-by: Fabio Estevam <fabio.estevam@freescale.com>

Thanks, Fabio!

Eric, do you mind if I take over, I'll audit the rest of the stack
regarding this change, too.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: NFS does not work on linux-next 20140331
  2014-03-31 16:54         ` Hannes Frederic Sowa
@ 2014-03-31 17:41           ` Eric Dumazet
  0 siblings, 0 replies; 11+ messages in thread
From: Eric Dumazet @ 2014-03-31 17:41 UTC (permalink / raw)
  To: Hannes Frederic Sowa
  Cc: Fabio Estevam, netdev@vger.kernel.org, David S. Miller

On Mon, 2014-03-31 at 18:54 +0200, Hannes Frederic Sowa wrote:

> Eric, do you mind if I take over, I'll audit the rest of the stack
> regarding this change, too.

I do not mind at all ;)

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH net] ipv6: some ipv6 statistic counters failed to disable bh
  2014-03-31 16:14 NFS does not work on linux-next 20140331 Fabio Estevam
  2014-03-31 16:21 ` Hannes Frederic Sowa
  2014-03-31 16:29 ` Eric Dumazet
@ 2014-03-31 18:14 ` Hannes Frederic Sowa
  2014-03-31 20:39   ` David Miller
  2 siblings, 1 reply; 11+ messages in thread
From: Hannes Frederic Sowa @ 2014-03-31 18:14 UTC (permalink / raw)
  To: Fabio Estevam; +Cc: netdev@vger.kernel.org, David S. Miller, eric.dumazet

After commit c15b1ccadb323ea ("ipv6: move DAD and addrconf_verify
processing to workqueue") some counters are now updated in process context
and thus need to disable bh before doing so, otherwise deadlocks can
happen on 32-bit archs. Fabio Estevam noticed this while while mounting
a NFS volume on an ARM board.

As a compensation for missing this I looked after the other *_STATS_BH
and found three other calls which need updating:

1) icmp6_send: ip6_fragment -> icmpv6_send -> icmp6_send (error handling)
2) ip6_push_pending_frames: rawv6_sendmsg -> rawv6_push_pending_frames -> ...
   (only in case of icmp protocol with raw sockets in error handling)
3) ping6_v6_sendmsg (error handling)

Fixes: c15b1ccadb323ea ("ipv6: move DAD and addrconf_verify processing to workqueue")
Reported-by: Fabio Estevam <festevam@gmail.com>
Tested-by: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
---

I would propose this patch for -stable, too.

Thanks!

 net/ipv6/icmp.c       |  2 +-
 net/ipv6/ip6_output.c |  4 ++--
 net/ipv6/mcast.c      | 11 ++++++-----
 net/ipv6/ping.c       |  4 ++--
 4 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
index f2610e1..7b32652 100644
--- a/net/ipv6/icmp.c
+++ b/net/ipv6/icmp.c
@@ -520,7 +520,7 @@ static void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info)
 			      np->tclass, NULL, &fl6, (struct rt6_info *)dst,
 			      MSG_DONTWAIT, np->dontfrag);
 	if (err) {
-		ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTERRORS);
+		ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTERRORS);
 		ip6_flush_pending_frames(sk);
 	} else {
 		err = icmpv6_push_pending_frames(sk, &fl6, &tmp_hdr,
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index 64d6073..3702d17 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1566,8 +1566,8 @@ int ip6_push_pending_frames(struct sock *sk)
 	if (proto == IPPROTO_ICMPV6) {
 		struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb));
 
-		ICMP6MSGOUT_INC_STATS_BH(net, idev, icmp6_hdr(skb)->icmp6_type);
-		ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTMSGS);
+		ICMP6MSGOUT_INC_STATS(net, idev, icmp6_hdr(skb)->icmp6_type);
+		ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTMSGS);
 	}
 
 	err = ip6_local_out(skb);
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
index e1e4735..08b367c 100644
--- a/net/ipv6/mcast.c
+++ b/net/ipv6/mcast.c
@@ -1620,11 +1620,12 @@ static void mld_sendpack(struct sk_buff *skb)
 		      dst_output);
 out:
 	if (!err) {
-		ICMP6MSGOUT_INC_STATS_BH(net, idev, ICMPV6_MLD2_REPORT);
-		ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTMSGS);
-		IP6_UPD_PO_STATS_BH(net, idev, IPSTATS_MIB_OUTMCAST, payload_len);
-	} else
-		IP6_INC_STATS_BH(net, idev, IPSTATS_MIB_OUTDISCARDS);
+		ICMP6MSGOUT_INC_STATS(net, idev, ICMPV6_MLD2_REPORT);
+		ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTMSGS);
+		IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUTMCAST, payload_len);
+	} else {
+		IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS);
+	}
 
 	rcu_read_unlock();
 	return;
diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c
index 587bbdc..bda7429 100644
--- a/net/ipv6/ping.c
+++ b/net/ipv6/ping.c
@@ -182,8 +182,8 @@ int ping_v6_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
 			      MSG_DONTWAIT, np->dontfrag);
 
 	if (err) {
-		ICMP6_INC_STATS_BH(sock_net(sk), rt->rt6i_idev,
-				   ICMP6_MIB_OUTERRORS);
+		ICMP6_INC_STATS(sock_net(sk), rt->rt6i_idev,
+				ICMP6_MIB_OUTERRORS);
 		ip6_flush_pending_frames(sk);
 	} else {
 		err = icmpv6_push_pending_frames(sk, &fl6,
-- 
1.9.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH net] ipv6: some ipv6 statistic counters failed to disable bh
  2014-03-31 18:14 ` [PATCH net] ipv6: some ipv6 statistic counters failed to disable bh Hannes Frederic Sowa
@ 2014-03-31 20:39   ` David Miller
  0 siblings, 0 replies; 11+ messages in thread
From: David Miller @ 2014-03-31 20:39 UTC (permalink / raw)
  To: hannes; +Cc: festevam, netdev, eric.dumazet

From: Hannes Frederic Sowa <hannes@stressinduktion.org>
Date: Mon, 31 Mar 2014 20:14:10 +0200

> After commit c15b1ccadb323ea ("ipv6: move DAD and addrconf_verify
> processing to workqueue") some counters are now updated in process context
> and thus need to disable bh before doing so, otherwise deadlocks can
> happen on 32-bit archs. Fabio Estevam noticed this while while mounting
> a NFS volume on an ARM board.
> 
> As a compensation for missing this I looked after the other *_STATS_BH
> and found three other calls which need updating:
> 
> 1) icmp6_send: ip6_fragment -> icmpv6_send -> icmp6_send (error handling)
> 2) ip6_push_pending_frames: rawv6_sendmsg -> rawv6_push_pending_frames -> ...
>    (only in case of icmp protocol with raw sockets in error handling)
> 3) ping6_v6_sendmsg (error handling)
> 
> Fixes: c15b1ccadb323ea ("ipv6: move DAD and addrconf_verify processing to workqueue")
> Reported-by: Fabio Estevam <festevam@gmail.com>
> Tested-by: Fabio Estevam <fabio.estevam@freescale.com>
> Cc: Eric Dumazet <eric.dumazet@gmail.com>
> Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
> ---
> 
> I would propose this patch for -stable, too.

Applied and queued up for -stable, thanks.

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2014-03-31 20:39 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-31 16:14 NFS does not work on linux-next 20140331 Fabio Estevam
2014-03-31 16:21 ` Hannes Frederic Sowa
2014-03-31 16:29 ` Eric Dumazet
2014-03-31 16:35   ` Fabio Estevam
2014-03-31 16:43     ` Hannes Frederic Sowa
2014-03-31 16:50       ` Fabio Estevam
2014-03-31 16:54         ` Hannes Frederic Sowa
2014-03-31 17:41           ` Eric Dumazet
2014-03-31 16:47     ` Eric Dumazet
2014-03-31 18:14 ` [PATCH net] ipv6: some ipv6 statistic counters failed to disable bh Hannes Frederic Sowa
2014-03-31 20:39   ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).