2016-04-29 23:18:41

by Fabio Estevam

[permalink] [raw]
Subject: Cannot use NFS with linux-next 20160429

Hi,

NFS is not working on a imx6q-sabresd board running linux-next 20160429:

[ 15.753317] #0: wm8962-audio
[ 15.759437] Root-NFS: no NFS server address
[ 15.763649] VFS: Unable to mount root fs via NFS, trying floppy.
[ 15.774223] VFS: Cannot open root device "nfs" or
unknown-block(2,0): error -6
[ 15.781540] Please append a correct "root=" boot option; here are
the available partitions:
[ 15.790145] 0100 65536 ram0 (driver?)
[ 15.794837] 0101 65536 ram1 (driver?)
[ 15.799576] 0102 65536 ram2 (driver?)
[ 15.804262] 0103 65536 ram3 (driver?)
[ 15.809023] 0104 65536 ram4 (driver?)
[ 15.813710] 0105 65536 ram5 (driver?)
[ 15.818392] 0106 65536 ram6 (driver?)
[ 15.823121] 0107 65536 ram7 (driver?)
[ 15.827804] 0108 65536 ram8 (driver?)
[ 15.832531] 0109 65536 ram9 (driver?)
[ 15.837213] 010a 65536 ram10 (driver?)
[ 15.841989] 010b 65536 ram11 (driver?)
[ 15.846729] 010c 65536 ram12 (driver?)
[ 15.851491] 010d 65536 ram13 (driver?)
[ 15.856228] 010e 65536 ram14 (driver?)
[ 15.860992] 010f 65536 ram15 (driver?)
[ 15.865742] 1f00 4096 mtdblock0 (driver?)
[ 15.870853] b300 3872256 mmcblk1 driver: mmcblk
[ 15.876199] b308 7757824 mmcblk2 driver: mmcblk
[ 15.881570] b320 128 mmcblk2rpmb (driver?)
[ 15.886830] b318 1024 mmcblk2boot1 (driver?)
[ 15.892201] b310 1024 mmcblk2boot0 (driver?)
[ 15.897541] Kernel panic - not syncing: VFS: Unable to mount root
fs on unknown-block(2,0)
[ 15.905978] CPU0: stopping
[ 15.908704] CPU: 0 PID: 0 Comm: swapper/0 Not tainted
4.6.0-rc5-next-20160429 #349
[ 15.916284] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[ 15.922818] Backtrace:
[ 15.925316] [<c010b6f8>] (dump_backtrace) from [<c010b894>]
(show_stack+0x18/0x1c)
[ 15.932893] r6:60000193 r5:ffffffff r4:00000000 r3:00000000
[ 15.938649] [<c010b87c>] (show_stack) from [<c03df190>]
(dump_stack+0xb0/0xe8)
[ 15.945889] [<c03df0e0>] (dump_stack) from [<c010edec>]
(handle_IPI+0x174/0x1a4)
[ 15.953292] r8:c0d01f08 r7:c0c746ec r6:00000000 r5:c0d02b10
r4:00000000 r3:c0d05e80
[ 15.961147] [<c010ec78>] (handle_IPI) from [<c0101618>]
(gic_handle_irq+0x8c/0x9c)
[ 15.968722] r8:c0d21f80 r7:c0d02c58 r6:c0d01f08 r5:f400010c
r4:f4000100 r3:00000c04
[ 15.976573] [<c010158c>] (gic_handle_irq) from [<c010c4b8>]
(__irq_svc+0x58/0x78)
[ 15.984065] Exception stack(0xc0d01f08 to 0xc0d01f50)
[ 15.989129] 1f00: 00000001 00000001 00000000
c011b920 00000000 c0d02984
[ 15.997318] 1f20: 00000000 00000000 c0c757b8 c0d029d8 c0d029d0
c0d01f64 c0d01f28 c0d01f58
[ 16.005505] 1f40: c016d120 c01089e0 20000013 ffffffff
[ 16.010563] r10:c0d029d0 r9:c0d029d8 r8:c0c757b8 r7:c0d01f3c
r6:ffffffff r5:20000013
[ 16.018495] r4:c01089e0 r3:c0d05e80
[ 16.022130] [<c01089b8>] (arch_cpu_idle) from [<c01661a0>]
(default_idle_call+0x28/0x38)
[ 16.030236] [<c0166178>] (default_idle_call) from [<c0166378>]
(cpu_startup_entry+0x1c8/0x24c)
[ 16.038864] [<c01661b0>] (cpu_startup_entry) from [<c08edd78>]
(rest_init+0x12c/0x16c)
[ 16.046788] r7:c0c5da48 r3:00000000
[ 16.050417] [<c08edc4c>] (rest_init) from [<c0c00cbc>]
(start_kernel+0x340/0x3b0)
[ 16.057906] r5:ffffffff r4:c0d6e050
[ 16.061532] [<c0c0097c>] (start_kernel) from [<1000807c>] (0x1000807c)
[ 16.068067] r10:00000000 r8:1000406a r7:c0d0780c r6:c0c5da44
r5:c0d0296c r4:c0d6e294
[ 16.076002] CPU2: stopping
[ 16.078725] CPU: 2 PID: 0 Comm: swapper/2 Not tainted
4.6.0-rc5-next-20160429 #349
[ 16.086302] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[ 16.092836] Backtrace:
[ 16.095320] [<c010b6f8>] (dump_backtrace) from [<c010b894>]
(show_stack+0x18/0x1c)
[ 16.102897] r6:60000193 r5:ffffffff r4:00000000 r3:00000000
[ 16.108646] [<c010b87c>] (show_stack) from [<c03df190>]
(dump_stack+0xb0/0xe8)
[ 16.115883] [<c03df0e0>] (dump_stack) from [<c010edec>]
(handle_IPI+0x174/0x1a4)
[ 16.123286] r8:ef0a5f58 r7:c0c746ec r6:00000000 r5:c0d02b10
r4:00000002 r3:ef0a8000
[ 16.131138] [<c010ec78>] (handle_IPI) from [<c0101618>]
(gic_handle_irq+0x8c/0x9c)
[ 16.138713] r8:c0d21f80 r7:c0d02c58 r6:ef0a5f58 r5:f400010c
r4:f4000100 r3:00000c04
[ 16.146562] [<c010158c>] (gic_handle_irq) from [<c010c4b8>]
(__irq_svc+0x58/0x78)
[ 16.154052] Exception stack(0xef0a5f58 to 0xef0a5fa0)
[ 16.159112] 5f40:
00000001 00000001
[ 16.167301] 5f60: 00000000 c011b920 00000000 c0d02984 00000000
00000000 c0c757b8 c0d029d8
[ 16.175489] 5f80: c0d029d0 ef0a5fb4 ef0a5f78 ef0a5fa8 c016d120
c01089e0 20000013 ffffffff
[ 16.183672] r10:c0d029d0 r9:c0d029d8 r8:c0c757b8 r7:ef0a5f8c
r6:ffffffff r5:20000013
[ 16.191601] r4:c01089e0 r3:ef0a8000
[ 16.195230] [<c01089b8>] (arch_cpu_idle) from [<c01661a0>]
(default_idle_call+0x28/0x38)
[ 16.203334] [<c0166178>] (default_idle_call) from [<c0166378>]
(cpu_startup_entry+0x1c8/0x24c)
[ 16.211959] [<c01661b0>] (cpu_startup_entry) from [<c010ea14>]
(secondary_start_kernel+0x130/0x154)
[ 16.221010] r7:c0d6e388 r3:00000004
[ 16.224633] [<c010e8e4>] (secondary_start_kernel) from [<101016cc>]
(0x101016cc)
[ 16.232035] r5:00000051 r4:3f08806a
[ 16.235656] CPU1: stopping
[ 16.238378] CPU: 1 PID: 0 Comm: swapper/1 Not tainted
4.6.0-rc5-next-20160429 #349
[ 16.245954] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[ 16.252487] Backtrace:
[ 16.254970] [<c010b6f8>] (dump_backtrace) from [<c010b894>]
(show_stack+0x18/0x1c)
[ 16.262545] r6:60000193 r5:ffffffff r4:00000000 r3:00000000
[ 16.268291] [<c010b87c>] (show_stack) from [<c03df190>]
(dump_stack+0xb0/0xe8)
[ 16.275529] [<c03df0e0>] (dump_stack) from [<c010edec>]
(handle_IPI+0x174/0x1a4)
[ 16.282931] r8:ef0a3f58 r7:c0c746ec r6:00000000 r5:c0d02b10
r4:00000001 r3:ef076c00
[ 16.290777] [<c010ec78>] (handle_IPI) from [<c0101618>]
(gic_handle_irq+0x8c/0x9c)
[ 16.298353] r8:c0d21f80 r7:c0d02c58 r6:ef0a3f58 r5:f400010c
r4:f4000100 r3:00000c04
[ 16.306199] [<c010158c>] (gic_handle_irq) from [<c010c4b8>]
(__irq_svc+0x58/0x78)
[ 16.313688] Exception stack(0xef0a3f58 to 0xef0a3fa0)
[ 16.318747] 3f40:
00000001 00000001
[ 16.326935] 3f60: 00000000 c011b920 00000000 c0d02984 00000000
00000000 c0c757b8 c0d029d8
[ 16.335123] 3f80: c0d029d0 ef0a3fb4 ef0a3f78 ef0a3fa8 c016d120
c01089e0 20000013 ffffffff
[ 16.343304] r10:c0d029d0 r9:c0d029d8 r8:c0c757b8 r7:ef0a3f8c
r6:ffffffff r5:20000013
[ 16.351230] r4:c01089e0 r3:ef076c00
[ 16.354856] [<c01089b8>] (arch_cpu_idle) from [<c01661a0>]
(default_idle_call+0x28/0x38)
[ 16.362961] [<c0166178>] (default_idle_call) from [<c0166378>]
(cpu_startup_entry+0x1c8/0x24c)
[ 16.371585] [<c01661b0>] (cpu_startup_entry) from [<c010ea14>]
(secondary_start_kernel+0x130/0x154)
[ 16.380635] r7:c0d6e388 r3:00000002
[ 16.384256] [<c010e8e4>] (secondary_start_kernel) from [<101016cc>]
(0x101016cc)
[ 16.391657] r5:00000051 r4:3f08806a
[ 16.395300] ---[ end Kernel panic - not syncing: VFS: Unable to
mount root fs on unknown-block(2,0)

Any ideas? Thanks


2016-05-01 19:52:30

by Chuck Lever III

[permalink] [raw]
Subject: Re: Cannot use NFS with linux-next 20160429

Hi Fabio-

> On Apr 29, 2016, at 7:18 PM, Fabio Estevam <[email protected]> wrote:
>
> Hi,
>
> NFS is not working on a imx6q-sabresd board running linux-next 20160429:
>
> [ 15.753317] #0: wm8962-audio
> [ 15.759437] Root-NFS: no NFS server address

At a glance, that looks like the NFSROOT mount options are
invalid? First, confirm what is specified on the kernel
cmdline.

I'm not aware of any recent changes to NFSROOT. Often
these NFSROOT problems turn out to be related to churn in
the underlying Ethernet drivers or the generic code that
handles mounting the root filesystem at boot time.

Thus a second suggestion would be to use "git bisect".


> [ 15.763649] VFS: Unable to mount root fs via NFS, trying floppy.
> [ 15.774223] VFS: Cannot open root device "nfs" or
> unknown-block(2,0): error -6
> [ 15.781540] Please append a correct "root=" boot option; here are
> the available partitions:
> [ 15.790145] 0100 65536 ram0 (driver?)
> [ 15.794837] 0101 65536 ram1 (driver?)
> [ 15.799576] 0102 65536 ram2 (driver?)
> [ 15.804262] 0103 65536 ram3 (driver?)
> [ 15.809023] 0104 65536 ram4 (driver?)
> [ 15.813710] 0105 65536 ram5 (driver?)
> [ 15.818392] 0106 65536 ram6 (driver?)
> [ 15.823121] 0107 65536 ram7 (driver?)
> [ 15.827804] 0108 65536 ram8 (driver?)
> [ 15.832531] 0109 65536 ram9 (driver?)
> [ 15.837213] 010a 65536 ram10 (driver?)
> [ 15.841989] 010b 65536 ram11 (driver?)
> [ 15.846729] 010c 65536 ram12 (driver?)
> [ 15.851491] 010d 65536 ram13 (driver?)
> [ 15.856228] 010e 65536 ram14 (driver?)
> [ 15.860992] 010f 65536 ram15 (driver?)
> [ 15.865742] 1f00 4096 mtdblock0 (driver?)
> [ 15.870853] b300 3872256 mmcblk1 driver: mmcblk
> [ 15.876199] b308 7757824 mmcblk2 driver: mmcblk
> [ 15.881570] b320 128 mmcblk2rpmb (driver?)
> [ 15.886830] b318 1024 mmcblk2boot1 (driver?)
> [ 15.892201] b310 1024 mmcblk2boot0 (driver?)
> [ 15.897541] Kernel panic - not syncing: VFS: Unable to mount root
> fs on unknown-block(2,0)
> [ 15.905978] CPU0: stopping
> [ 15.908704] CPU: 0 PID: 0 Comm: swapper/0 Not tainted
> 4.6.0-rc5-next-20160429 #349
> [ 15.916284] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
> [ 15.922818] Backtrace:
> [ 15.925316] [<c010b6f8>] (dump_backtrace) from [<c010b894>]
> (show_stack+0x18/0x1c)
> [ 15.932893] r6:60000193 r5:ffffffff r4:00000000 r3:00000000
> [ 15.938649] [<c010b87c>] (show_stack) from [<c03df190>]
> (dump_stack+0xb0/0xe8)
> [ 15.945889] [<c03df0e0>] (dump_stack) from [<c010edec>]
> (handle_IPI+0x174/0x1a4)
> [ 15.953292] r8:c0d01f08 r7:c0c746ec r6:00000000 r5:c0d02b10
> r4:00000000 r3:c0d05e80
> [ 15.961147] [<c010ec78>] (handle_IPI) from [<c0101618>]
> (gic_handle_irq+0x8c/0x9c)
> [ 15.968722] r8:c0d21f80 r7:c0d02c58 r6:c0d01f08 r5:f400010c
> r4:f4000100 r3:00000c04
> [ 15.976573] [<c010158c>] (gic_handle_irq) from [<c010c4b8>]
> (__irq_svc+0x58/0x78)
> [ 15.984065] Exception stack(0xc0d01f08 to 0xc0d01f50)
> [ 15.989129] 1f00: 00000001 00000001 00000000
> c011b920 00000000 c0d02984
> [ 15.997318] 1f20: 00000000 00000000 c0c757b8 c0d029d8 c0d029d0
> c0d01f64 c0d01f28 c0d01f58
> [ 16.005505] 1f40: c016d120 c01089e0 20000013 ffffffff
> [ 16.010563] r10:c0d029d0 r9:c0d029d8 r8:c0c757b8 r7:c0d01f3c
> r6:ffffffff r5:20000013
> [ 16.018495] r4:c01089e0 r3:c0d05e80
> [ 16.022130] [<c01089b8>] (arch_cpu_idle) from [<c01661a0>]
> (default_idle_call+0x28/0x38)
> [ 16.030236] [<c0166178>] (default_idle_call) from [<c0166378>]
> (cpu_startup_entry+0x1c8/0x24c)
> [ 16.038864] [<c01661b0>] (cpu_startup_entry) from [<c08edd78>]
> (rest_init+0x12c/0x16c)
> [ 16.046788] r7:c0c5da48 r3:00000000
> [ 16.050417] [<c08edc4c>] (rest_init) from [<c0c00cbc>]
> (start_kernel+0x340/0x3b0)
> [ 16.057906] r5:ffffffff r4:c0d6e050
> [ 16.061532] [<c0c0097c>] (start_kernel) from [<1000807c>] (0x1000807c)
> [ 16.068067] r10:00000000 r8:1000406a r7:c0d0780c r6:c0c5da44
> r5:c0d0296c r4:c0d6e294
> [ 16.076002] CPU2: stopping
> [ 16.078725] CPU: 2 PID: 0 Comm: swapper/2 Not tainted
> 4.6.0-rc5-next-20160429 #349
> [ 16.086302] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
> [ 16.092836] Backtrace:
> [ 16.095320] [<c010b6f8>] (dump_backtrace) from [<c010b894>]
> (show_stack+0x18/0x1c)
> [ 16.102897] r6:60000193 r5:ffffffff r4:00000000 r3:00000000
> [ 16.108646] [<c010b87c>] (show_stack) from [<c03df190>]
> (dump_stack+0xb0/0xe8)
> [ 16.115883] [<c03df0e0>] (dump_stack) from [<c010edec>]
> (handle_IPI+0x174/0x1a4)
> [ 16.123286] r8:ef0a5f58 r7:c0c746ec r6:00000000 r5:c0d02b10
> r4:00000002 r3:ef0a8000
> [ 16.131138] [<c010ec78>] (handle_IPI) from [<c0101618>]
> (gic_handle_irq+0x8c/0x9c)
> [ 16.138713] r8:c0d21f80 r7:c0d02c58 r6:ef0a5f58 r5:f400010c
> r4:f4000100 r3:00000c04
> [ 16.146562] [<c010158c>] (gic_handle_irq) from [<c010c4b8>]
> (__irq_svc+0x58/0x78)
> [ 16.154052] Exception stack(0xef0a5f58 to 0xef0a5fa0)
> [ 16.159112] 5f40:
> 00000001 00000001
> [ 16.167301] 5f60: 00000000 c011b920 00000000 c0d02984 00000000
> 00000000 c0c757b8 c0d029d8
> [ 16.175489] 5f80: c0d029d0 ef0a5fb4 ef0a5f78 ef0a5fa8 c016d120
> c01089e0 20000013 ffffffff
> [ 16.183672] r10:c0d029d0 r9:c0d029d8 r8:c0c757b8 r7:ef0a5f8c
> r6:ffffffff r5:20000013
> [ 16.191601] r4:c01089e0 r3:ef0a8000
> [ 16.195230] [<c01089b8>] (arch_cpu_idle) from [<c01661a0>]
> (default_idle_call+0x28/0x38)
> [ 16.203334] [<c0166178>] (default_idle_call) from [<c0166378>]
> (cpu_startup_entry+0x1c8/0x24c)
> [ 16.211959] [<c01661b0>] (cpu_startup_entry) from [<c010ea14>]
> (secondary_start_kernel+0x130/0x154)
> [ 16.221010] r7:c0d6e388 r3:00000004
> [ 16.224633] [<c010e8e4>] (secondary_start_kernel) from [<101016cc>]
> (0x101016cc)
> [ 16.232035] r5:00000051 r4:3f08806a
> [ 16.235656] CPU1: stopping
> [ 16.238378] CPU: 1 PID: 0 Comm: swapper/1 Not tainted
> 4.6.0-rc5-next-20160429 #349
> [ 16.245954] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
> [ 16.252487] Backtrace:
> [ 16.254970] [<c010b6f8>] (dump_backtrace) from [<c010b894>]
> (show_stack+0x18/0x1c)
> [ 16.262545] r6:60000193 r5:ffffffff r4:00000000 r3:00000000
> [ 16.268291] [<c010b87c>] (show_stack) from [<c03df190>]
> (dump_stack+0xb0/0xe8)
> [ 16.275529] [<c03df0e0>] (dump_stack) from [<c010edec>]
> (handle_IPI+0x174/0x1a4)
> [ 16.282931] r8:ef0a3f58 r7:c0c746ec r6:00000000 r5:c0d02b10
> r4:00000001 r3:ef076c00
> [ 16.290777] [<c010ec78>] (handle_IPI) from [<c0101618>]
> (gic_handle_irq+0x8c/0x9c)
> [ 16.298353] r8:c0d21f80 r7:c0d02c58 r6:ef0a3f58 r5:f400010c
> r4:f4000100 r3:00000c04
> [ 16.306199] [<c010158c>] (gic_handle_irq) from [<c010c4b8>]
> (__irq_svc+0x58/0x78)
> [ 16.313688] Exception stack(0xef0a3f58 to 0xef0a3fa0)
> [ 16.318747] 3f40:
> 00000001 00000001
> [ 16.326935] 3f60: 00000000 c011b920 00000000 c0d02984 00000000
> 00000000 c0c757b8 c0d029d8
> [ 16.335123] 3f80: c0d029d0 ef0a3fb4 ef0a3f78 ef0a3fa8 c016d120
> c01089e0 20000013 ffffffff
> [ 16.343304] r10:c0d029d0 r9:c0d029d8 r8:c0c757b8 r7:ef0a3f8c
> r6:ffffffff r5:20000013
> [ 16.351230] r4:c01089e0 r3:ef076c00
> [ 16.354856] [<c01089b8>] (arch_cpu_idle) from [<c01661a0>]
> (default_idle_call+0x28/0x38)
> [ 16.362961] [<c0166178>] (default_idle_call) from [<c0166378>]
> (cpu_startup_entry+0x1c8/0x24c)
> [ 16.371585] [<c01661b0>] (cpu_startup_entry) from [<c010ea14>]
> (secondary_start_kernel+0x130/0x154)
> [ 16.380635] r7:c0d6e388 r3:00000002
> [ 16.384256] [<c010e8e4>] (secondary_start_kernel) from [<101016cc>]
> (0x101016cc)
> [ 16.391657] r5:00000051 r4:3f08806a
> [ 16.395300] ---[ end Kernel panic - not syncing: VFS: Unable to
> mount root fs on unknown-block(2,0)
>
> Any ideas? Thanks
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html

--
Chuck Lever




2016-05-03 19:37:49

by Fabio Estevam

[permalink] [raw]
Subject: Re: Cannot use NFS with linux-next 20160429

Hi Chuck,

On Sun, May 1, 2016 at 4:52 PM, Chuck Lever <[email protected]> wrote:
> Hi Fabio-
>
>> On Apr 29, 2016, at 7:18 PM, Fabio Estevam <[email protected]> wrote:
>>
>> Hi,
>>
>> NFS is not working on a imx6q-sabresd board running linux-next 20160429:
>>
>> [ 15.753317] #0: wm8962-audio
>> [ 15.759437] Root-NFS: no NFS server address
>
> At a glance, that looks like the NFSROOT mount options are
> invalid? First, confirm what is specified on the kernel
> cmdline.

Yes, the kernel command line is correct.

>
> I'm not aware of any recent changes to NFSROOT. Often
> these NFSROOT problems turn out to be related to churn in
> the underlying Ethernet drivers or the generic code that
> handles mounting the root filesystem at boot time.

Today's next shows some different info:

[ 7.606456] #0: wm8962-audio
[ 7.672659] VFS: Mounted root (nfs filesystem) readonly on device 0:14.
[ 7.680860] devtmpfs: mounted
[ 7.685664] Freeing unused kernel memory: 1024K (c0c00000 - c0d00000)
[ 7.871481]
[ 7.873004] =================================
[ 7.877381] [ INFO: inconsistent lock state ]
[ 7.881760] 4.6.0-rc6-next-20160503-00002-g51d9962 #351 Not tainted
[ 7.888043] ---------------------------------
[ 7.892419] inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
[ 7.898449] kworker/0:1H/179 [HC0[0]:SC0[0]:HE1:SE1] takes:
[ 7.904040] (&syncp->seq#5){+.?...}, at: [<c0752328>] tcp_ack+0x134/0x129c
[ 7.911166] {IN-SOFTIRQ-W} state was registered at:
[ 7.916061] [<c016cc68>] lock_acquire+0x78/0x98
[ 7.920816] [<c074ccbc>] tcp_snd_una_update+0x64/0xa8
[ 7.926092] [<c0752328>] tcp_ack+0x134/0x129c
[ 7.930668] [<c0755de8>] tcp_rcv_state_process+0x814/0xfc8
[ 7.936375] [<c075e800>] tcp_v4_do_rcv+0x64/0x1c8
[ 7.941305] [<c07616c8>] tcp_v4_rcv+0xf00/0xfbc
[ 7.946057] [<c07374cc>] ip_local_deliver_finish+0xd4/0x550
[ 7.951859] [<c0737bc4>] ip_local_deliver+0xcc/0xdc
[ 7.956957] [<c0736d78>] ip_rcv_finish+0xc4/0x744
[ 7.961881] [<c073809c>] ip_rcv+0x4c8/0x7a8
[ 7.966284] [<c06fa448>] __netif_receive_skb_core+0x514/0x8ec
[ 7.972251] [<c06ff854>] __netif_receive_skb+0x2c/0x8c
[ 7.977614] [<c06ffb50>] netif_receive_skb_internal+0x7c/0x1f0
[ 7.983666] [<c0700e38>] napi_gro_receive+0x88/0xdc
[ 7.988764] [<c058fb4c>] fec_enet_rx_napi+0x390/0x9c8
[ 7.994036] [<c0700724>] net_rx_action+0x148/0x344
[ 7.999046] [<c012996c>] __do_softirq+0x130/0x2bc
[ 8.003976] [<c0129e40>] irq_exit+0xc4/0x138
[ 8.008466] [<c0177920>] __handle_domain_irq+0x74/0xe4
[ 8.013838] [<c01015d8>] gic_handle_irq+0x4c/0x9c
[ 8.018763] [<c010c4b8>] __irq_svc+0x58/0x78
[ 8.023251] [<c08f7db8>] _raw_spin_unlock_irq+0x30/0x34
[ 8.028710] [<c014a03c>] finish_task_switch+0xcc/0x274
[ 8.034072] [<c08f2728>] __schedule+0x23c/0x6f8
[ 8.038823] [<c08f2d0c>] schedule+0x3c/0xa0
[ 8.043224] [<c08f2f74>] schedule_preempt_disabled+0x10/0x14
[ 8.049103] [<c01663b0>] cpu_startup_entry+0x1f4/0x24c
[ 8.054468] [<c08f070c>] rest_init+0x12c/0x16c
[ 8.059130] [<c0c00cbc>] start_kernel+0x340/0x3b0
[ 8.064059] [<1000807c>] 0x1000807c
[ 8.067767] irq event stamp: 3601
[ 8.071099] hardirqs last enabled at (3601): [<c08f7d74>]
_raw_spin_unlock_irqrestore+0x38/0x4c
[ 8.079936] hardirqs last disabled at (3600): [<c08f7728>]
_raw_spin_lock_irqsave+0x24/0x54
[ 8.088336] softirqs last enabled at (3598): [<c06e9754>]
__release_sock+0x3c/0x124
[ 8.096128] softirqs last disabled at (3596): [<c06e985c>]
release_sock+0x20/0xa4
[ 8.103654]
[ 8.103654] other info that might help us debug this:
[ 8.110202] Possible unsafe locking scenario:
[ 8.110202]
[ 8.116140] CPU0
[ 8.118601] ----
[ 8.121062] lock(&syncp->seq#5);
[ 8.124547] <Interrupt>
[ 8.127182] lock(&syncp->seq#5);
[ 8.130838]
[ 8.130838] *** DEADLOCK ***
[ 8.130838]
[ 8.136785] 3 locks held by kworker/0:1H/179:
[ 8.141157] #0: ("rpciod"){.+.+.+}, at: [<c013e478>]
process_one_work+0x128/0x410
[ 8.148965] #1: ((&task->u.tk_work)){+.+.+.}, at: [<c013e478>]
process_one_work+0x128/0x410
[ 8.157630] #2: (sk_lock-AF_INET-RPC){+.+...}, at: [<c074af70>]
tcp_sendmsg+0x24/0xb5c
[ 8.165859]
[ 8.165859] stack backtrace:
[ 8.170247] CPU: 0 PID: 179 Comm: kworker/0:1H Not tainted
4.6.0-rc6-next-20160503-00002-g51d9962 #351
[ 8.179572] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[ 8.186137] Workqueue: rpciod rpc_async_schedule
[ 8.190791] Backtrace:
[ 8.193307] [<c010b6f8>] (dump_backtrace) from [<c010b894>]
(show_stack+0x18/0x1c)
[ 8.200894] r6:60000193 r5:ffffffff r4:00000000 r3:eebdc800
[ 8.206692] [<c010b87c>] (show_stack) from [<c03dfbf4>]
(dump_stack+0xb0/0xe8)
[ 8.213961] [<c03dfb44>] (dump_stack) from [<c01c72d4>]
(print_usage_bug+0x268/0x2dc)
[ 8.221809] r8:00000004 r7:eebdcd00 r6:eebdc800 r5:c0ae4bbc
r4:c0ec6054 r3:eebdc800
[ 8.229712] [<c01c706c>] (print_usage_bug) from [<c016ace0>]
(mark_lock+0x29c/0x6b0)
[ 8.237472] r10:c016a1c8 r8:00000004 r7:eebdc800 r6:00001054
r5:eebdcd00 r4:00000006
[ 8.245456] [<c016aa44>] (mark_lock) from [<c016b644>]
(__lock_acquire+0x550/0x17c8)
[ 8.253216] r10:c0d21d9c r9:000002be r8:c0e97784 r7:eebdc800
r6:c153a09c r5:eebdcd00
[ 8.261188] r4:00000003 r3:00000001
[ 8.264837] [<c016b0f4>] (__lock_acquire) from [<c016cc68>]
(lock_acquire+0x78/0x98)
[ 8.272598] r10:00000001 r9:c0752328 r8:2d738f6b r7:00000001
r6:c0752328 r5:60000113
[ 8.280568] r4:00000000
[ 8.283155] [<c016cbf0>] (lock_acquire) from [<c074ccbc>]
(tcp_snd_una_update+0x64/0xa8)
[ 8.291261] r7:00000000 r6:ee6b9500 r5:ee6b9500 r4:ee6b99cc
[ 8.297050] [<c074cc58>] (tcp_snd_una_update) from [<c0752328>]
(tcp_ack+0x134/0x129c)
[ 8.304984] r10:ee6b9570 r9:ee42f9c0 r8:2d738f6b r7:c0d02100
r6:00000002 r5:ee6b9500
[ 8.312956] r4:00000002
[ 8.315542] [<c07521f4>] (tcp_ack) from [<c0754c08>]
(tcp_rcv_established+0x140/0x774)
[ 8.323477] r10:ee6b9570 r9:ee42f9c0 r8:c0d6bfb3 r7:c155a080
r6:ee6e9a62 r5:ee42f9c0
[ 8.331448] r4:ee6b9500
[ 8.334039] [<c0754ac8>] (tcp_rcv_established) from [<c075e8fc>]
(tcp_v4_do_rcv+0x160/0x1c8)
[ 8.342494] r8:c0d6bfb3 r7:c155a080 r6:eea79600 r5:ee6b9500 r4:ee42f9c0
[ 8.349348] [<c075e79c>] (tcp_v4_do_rcv) from [<c06e97ac>]
(__release_sock+0x94/0x124)
[ 8.357281] r6:00000000 r5:ee6b9500 r4:00000000 r3:c075e79c
[ 8.363065] [<c06e9718>] (__release_sock) from [<c06e9870>]
(release_sock+0x34/0xa4)
[ 8.370825] r10:ee6b9500 r9:ee6c1ce4 r8:00000000 r7:00000080
r6:c074b1f0 r5:ee6b9570
[ 8.378797] r4:ee6b9500 r3:ee42f9c0
[ 8.382448] [<c06e983c>] (release_sock) from [<c074b1f0>]
(tcp_sendmsg+0x2a4/0xb5c)
[ 8.390122] r6:00000080 r5:ee6b9500 r4:ee6c2000 r3:00000015
[ 8.395922] [<c074af4c>] (tcp_sendmsg) from [<c077a824>]
(inet_sendmsg+0x128/0x200)
[ 8.403596] r10:c0d6c136 r9:ee6a4000 r8:ee6c1ce4 r7:00000080
r6:00000000 r5:c0d6c136
[ 8.411565] r4:ee6b9500
[ 8.414161] [<c077a6fc>] (inet_sendmsg) from [<c06e41ec>]
(sock_sendmsg+0x1c/0x2c)

2016-05-03 22:31:59

by Francois Romieu

[permalink] [raw]
Subject: Re: Cannot use NFS with linux-next 20160429

Fabio Estevam <[email protected]> :
[...]
> Today's next shows some different info:
>
> [ 7.606456] #0: wm8962-audio
> [ 7.672659] VFS: Mounted root (nfs filesystem) readonly on device 0:14.
> [ 7.680860] devtmpfs: mounted
> [ 7.685664] Freeing unused kernel memory: 1024K (c0c00000 - c0d00000)
> [ 7.871481]
> [ 7.873004] =================================
> [ 7.877381] [ INFO: inconsistent lock state ]
> [ 7.881760] 4.6.0-rc6-next-20160503-00002-g51d9962 #351 Not tainted
> [ 7.888043] ---------------------------------
> [ 7.892419] inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
> [ 7.898449] kworker/0:1H/179 [HC0[0]:SC0[0]:HE1:SE1] takes:
> [ 7.904040] (&syncp->seq#5){+.?...}, at: [<c0752328>] tcp_ack+0x134/0x129c
> [ 7.911166] {IN-SOFTIRQ-W} state was registered at:
> [ 7.916061] [<c016cc68>] lock_acquire+0x78/0x98
> [ 7.920816] [<c074ccbc>] tcp_snd_una_update+0x64/0xa8
> [ 7.926092] [<c0752328>] tcp_ack+0x134/0x129c
> [ 7.930668] [<c0755de8>] tcp_rcv_state_process+0x814/0xfc8
> [ 7.936375] [<c075e800>] tcp_v4_do_rcv+0x64/0x1c8
> [ 7.941305] [<c07616c8>] tcp_v4_rcv+0xf00/0xfbc
> [ 7.946057] [<c07374cc>] ip_local_deliver_finish+0xd4/0x550
> [ 7.951859] [<c0737bc4>] ip_local_deliver+0xcc/0xdc
> [ 7.956957] [<c0736d78>] ip_rcv_finish+0xc4/0x744
> [ 7.961881] [<c073809c>] ip_rcv+0x4c8/0x7a8
> [ 7.966284] [<c06fa448>] __netif_receive_skb_core+0x514/0x8ec
> [ 7.972251] [<c06ff854>] __netif_receive_skb+0x2c/0x8c
> [ 7.977614] [<c06ffb50>] netif_receive_skb_internal+0x7c/0x1f0
> [ 7.983666] [<c0700e38>] napi_gro_receive+0x88/0xdc
> [ 7.988764] [<c058fb4c>] fec_enet_rx_napi+0x390/0x9c8
> [ 7.994036] [<c0700724>] net_rx_action+0x148/0x344
> [ 7.999046] [<c012996c>] __do_softirq+0x130/0x2bc
[...]
> [ 8.165859] stack backtrace:
> [ 8.170247] CPU: 0 PID: 179 Comm: kworker/0:1H Not tainted
> 4.6.0-rc6-next-20160503-00002-g51d9962 #351
> [ 8.179572] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
> [ 8.186137] Workqueue: rpciod rpc_async_schedule
> [ 8.190791] Backtrace:
> [ 8.193307] [<c010b6f8>] (dump_backtrace) from [<c010b894>] > (show_stack+0x18/0x1c)
> [ 8.200894] r6:60000193 r5:ffffffff r4:00000000 r3:eebdc800
> [ 8.206692] [<c010b87c>] (show_stack) from [<c03dfbf4>] (dump_stack+0xb0/0xe8)
> [ 8.213961] [<c03dfb44>] (dump_stack) from [<c01c72d4>] (print_usage_bug+0x268/0x2dc)
> [ 8.221809] r8:00000004 r7:eebdcd00 r6:eebdc800 r5:c0ae4bbc r4:c0ec6054 r3:eebdc800
> [ 8.229712] [<c01c706c>] (print_usage_bug) from [<c016ace0>] (mark_lock+0x29c/0x6b0)
> [ 8.237472] r10:c016a1c8 r8:00000004 r7:eebdc800 r6:00001054 r5:eebdcd00 r4:00000006
> [ 8.245456] [<c016aa44>] (mark_lock) from [<c016b644>] (__lock_acquire+0x550/0x17c8)
> [ 8.253216] r10:c0d21d9c r9:000002be r8:c0e97784 r7:eebdc800 r6:c153a09c r5:eebdcd00
> [ 8.261188] r4:00000003 r3:00000001
> [ 8.264837] [<c016b0f4>] (__lock_acquire) from [<c016cc68>] (lock_acquire+0x78/0x98)
> [ 8.272598] r10:00000001 r9:c0752328 r8:2d738f6b r7:00000001 r6:c0752328 r5:60000113
> [ 8.280568] r4:00000000
> [ 8.283155] [<c016cbf0>] (lock_acquire) from [<c074ccbc>] (tcp_snd_una_update+0x64/0xa8)
> [ 8.291261] r7:00000000 r6:ee6b9500 r5:ee6b9500 r4:ee6b99cc
> [ 8.297050] [<c074cc58>] (tcp_snd_una_update) from [<c0752328>] (tcp_ack+0x134/0x129c)
> [ 8.304984] r10:ee6b9570 r9:ee42f9c0 r8:2d738f6b r7:c0d02100 r6:00000002 r5:ee6b9500
> [ 8.312956] r4:00000002
> [ 8.315542] [<c07521f4>] (tcp_ack) from [<c0754c08>] (tcp_rcv_established+0x140/0x774)
> [ 8.323477] r10:ee6b9570 r9:ee42f9c0 r8:c0d6bfb3 r7:c155a080 r6:ee6e9a62 r5:ee42f9c0
> [ 8.331448] r4:ee6b9500
> [ 8.334039] [<c0754ac8>] (tcp_rcv_established) from [<c075e8fc>] (tcp_v4_do_rcv+0x160/0x1c8)
> [ 8.342494] r8:c0d6bfb3 r7:c155a080 r6:eea79600 r5:ee6b9500 r4:ee42f9c0
> [ 8.349348] [<c075e79c>] (tcp_v4_do_rcv) from [<c06e97ac>] (__release_sock+0x94/0x124)
> [ 8.357281] r6:00000000 r5:ee6b9500 r4:00000000 r3:c075e79c
> [ 8.363065] [<c06e9718>] (__release_sock) from [<c06e9870>] (release_sock+0x34/0xa4)

The latter now runs with bh enabled. Ask Eric for a proper
replacement of u64_stats_update_ in tcp_snd_una_update.

(it's 00:30 here)

--
Ueimor

2016-05-03 22:35:04

by Eric Dumazet

[permalink] [raw]
Subject: Re: Cannot use NFS with linux-next 20160429

On Wed, 2016-05-04 at 00:31 +0200, Francois Romieu wrote:
> Fabio Estevam <[email protected]> :
> [...]
> > Today's next shows some different info:
> >
> > [ 7.606456] #0: wm8962-audio
> > [ 7.672659] VFS: Mounted root (nfs filesystem) readonly on device 0:14.
> > [ 7.680860] devtmpfs: mounted
> > [ 7.685664] Freeing unused kernel memory: 1024K (c0c00000 - c0d00000)
> > [ 7.871481]
> > [ 7.873004] =================================
> > [ 7.877381] [ INFO: inconsistent lock state ]
> > [ 7.881760] 4.6.0-rc6-next-20160503-00002-g51d9962 #351 Not tainted
> > [ 7.888043] ---------------------------------
> > [ 7.892419] inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
> > [ 7.898449] kworker/0:1H/179 [HC0[0]:SC0[0]:HE1:SE1] takes:
> > [ 7.904040] (&syncp->seq#5){+.?...}, at: [<c0752328>] tcp_ack+0x134/0x129c
> > [ 7.911166] {IN-SOFTIRQ-W} state was registered at:
> > [ 7.916061] [<c016cc68>] lock_acquire+0x78/0x98
> > [ 7.920816] [<c074ccbc>] tcp_snd_una_update+0x64/0xa8
> > [ 7.926092] [<c0752328>] tcp_ack+0x134/0x129c
> > [ 7.930668] [<c0755de8>] tcp_rcv_state_process+0x814/0xfc8
> > [ 7.936375] [<c075e800>] tcp_v4_do_rcv+0x64/0x1c8
> > [ 7.941305] [<c07616c8>] tcp_v4_rcv+0xf00/0xfbc
> > [ 7.946057] [<c07374cc>] ip_local_deliver_finish+0xd4/0x550
> > [ 7.951859] [<c0737bc4>] ip_local_deliver+0xcc/0xdc
> > [ 7.956957] [<c0736d78>] ip_rcv_finish+0xc4/0x744
> > [ 7.961881] [<c073809c>] ip_rcv+0x4c8/0x7a8
> > [ 7.966284] [<c06fa448>] __netif_receive_skb_core+0x514/0x8ec
> > [ 7.972251] [<c06ff854>] __netif_receive_skb+0x2c/0x8c
> > [ 7.977614] [<c06ffb50>] netif_receive_skb_internal+0x7c/0x1f0
> > [ 7.983666] [<c0700e38>] napi_gro_receive+0x88/0xdc
> > [ 7.988764] [<c058fb4c>] fec_enet_rx_napi+0x390/0x9c8
> > [ 7.994036] [<c0700724>] net_rx_action+0x148/0x344
> > [ 7.999046] [<c012996c>] __do_softirq+0x130/0x2bc
> [...]
> > [ 8.165859] stack backtrace:
> > [ 8.170247] CPU: 0 PID: 179 Comm: kworker/0:1H Not tainted
> > 4.6.0-rc6-next-20160503-00002-g51d9962 #351
> > [ 8.179572] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
> > [ 8.186137] Workqueue: rpciod rpc_async_schedule
> > [ 8.190791] Backtrace:
> > [ 8.193307] [<c010b6f8>] (dump_backtrace) from [<c010b894>] > (show_stack+0x18/0x1c)
> > [ 8.200894] r6:60000193 r5:ffffffff r4:00000000 r3:eebdc800
> > [ 8.206692] [<c010b87c>] (show_stack) from [<c03dfbf4>] (dump_stack+0xb0/0xe8)
> > [ 8.213961] [<c03dfb44>] (dump_stack) from [<c01c72d4>] (print_usage_bug+0x268/0x2dc)
> > [ 8.221809] r8:00000004 r7:eebdcd00 r6:eebdc800 r5:c0ae4bbc r4:c0ec6054 r3:eebdc800
> > [ 8.229712] [<c01c706c>] (print_usage_bug) from [<c016ace0>] (mark_lock+0x29c/0x6b0)
> > [ 8.237472] r10:c016a1c8 r8:00000004 r7:eebdc800 r6:00001054 r5:eebdcd00 r4:00000006
> > [ 8.245456] [<c016aa44>] (mark_lock) from [<c016b644>] (__lock_acquire+0x550/0x17c8)
> > [ 8.253216] r10:c0d21d9c r9:000002be r8:c0e97784 r7:eebdc800 r6:c153a09c r5:eebdcd00
> > [ 8.261188] r4:00000003 r3:00000001
> > [ 8.264837] [<c016b0f4>] (__lock_acquire) from [<c016cc68>] (lock_acquire+0x78/0x98)
> > [ 8.272598] r10:00000001 r9:c0752328 r8:2d738f6b r7:00000001 r6:c0752328 r5:60000113
> > [ 8.280568] r4:00000000
> > [ 8.283155] [<c016cbf0>] (lock_acquire) from [<c074ccbc>] (tcp_snd_una_update+0x64/0xa8)
> > [ 8.291261] r7:00000000 r6:ee6b9500 r5:ee6b9500 r4:ee6b99cc
> > [ 8.297050] [<c074cc58>] (tcp_snd_una_update) from [<c0752328>] (tcp_ack+0x134/0x129c)
> > [ 8.304984] r10:ee6b9570 r9:ee42f9c0 r8:2d738f6b r7:c0d02100 r6:00000002 r5:ee6b9500
> > [ 8.312956] r4:00000002
> > [ 8.315542] [<c07521f4>] (tcp_ack) from [<c0754c08>] (tcp_rcv_established+0x140/0x774)
> > [ 8.323477] r10:ee6b9570 r9:ee42f9c0 r8:c0d6bfb3 r7:c155a080 r6:ee6e9a62 r5:ee42f9c0
> > [ 8.331448] r4:ee6b9500
> > [ 8.334039] [<c0754ac8>] (tcp_rcv_established) from [<c075e8fc>] (tcp_v4_do_rcv+0x160/0x1c8)
> > [ 8.342494] r8:c0d6bfb3 r7:c155a080 r6:eea79600 r5:ee6b9500 r4:ee42f9c0
> > [ 8.349348] [<c075e79c>] (tcp_v4_do_rcv) from [<c06e97ac>] (__release_sock+0x94/0x124)
> > [ 8.357281] r6:00000000 r5:ee6b9500 r4:00000000 r3:c075e79c
> > [ 8.363065] [<c06e9718>] (__release_sock) from [<c06e9870>] (release_sock+0x34/0xa4)
>
> The latter now runs with bh enabled. Ask Eric for a proper
> replacement of u64_stats_update_ in tcp_snd_una_update.
>
> (it's 00:30 here)
>

Thanks Francois, I can fix this ;)




2016-05-03 23:56:08

by Eric Dumazet

[permalink] [raw]
Subject: [PATCH net-next] tcp: fix lockdep splat in tcp_snd_una_update()

From: Eric Dumazet <[email protected]>

tcp_snd_una_update() and tcp_rcv_nxt_update() call
u64_stats_update_begin() either from process context or BH handler.

This triggers a lockdep splat on 32bit & SMP builds.

We could add u64_stats_update_begin_bh() variant but this would
slow down 32bit builds with useless local_disable_bh() and
local_enable_bh() pairs, since we own the socket lock at this point.

I add sock_owned_by_me() helper to have proper lockdep support
even on 64bit builds, and new u64_stats_update_begin_raw()
and u64_stats_update_end_raw methods.

Fixes: c10d9310edf5 ("tcp: do not assume TCP code is non preemptible")
Reported-by: Fabio Estevam <[email protected]>
Diagnosed-by: Francois Romieu <[email protected]>
Signed-off-by: Eric Dumazet <[email protected]>
---
include/linux/u64_stats_sync.h | 14 ++++++++++++++
include/net/sock.h | 7 ++++++-
net/ipv4/tcp_input.c | 10 ++++++----
3 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/include/linux/u64_stats_sync.h b/include/linux/u64_stats_sync.h
index df89c9bcba7db8dbde3bbf2b99f9af6ed562b112..d3a2bb712af3b9613b98ef9c3219f8dcd31568a5 100644
--- a/include/linux/u64_stats_sync.h
+++ b/include/linux/u64_stats_sync.h
@@ -89,6 +89,20 @@ static inline void u64_stats_update_end(struct u64_stats_sync *syncp)
#endif
}

+static inline void u64_stats_update_begin_raw(struct u64_stats_sync *syncp)
+{
+#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
+ raw_write_seqcount_begin(&syncp->seq);
+#endif
+}
+
+static inline void u64_stats_update_end_raw(struct u64_stats_sync *syncp)
+{
+#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
+ raw_write_seqcount_end(&syncp->seq);
+#endif
+}
+
static inline unsigned int u64_stats_fetch_begin(const struct u64_stats_sync *syncp)
{
#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
diff --git a/include/net/sock.h b/include/net/sock.h
index 45f5b492c65883cd22e2f615e019fe0d0ba31167..c9c8b19df27c558354687119db60c0716909ea3f 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -1421,11 +1421,16 @@ static inline void unlock_sock_fast(struct sock *sk, bool slow)
* accesses from user process context.
*/

-static inline bool sock_owned_by_user(const struct sock *sk)
+static inline void sock_owned_by_me(const struct sock *sk)
{
#ifdef CONFIG_LOCKDEP
WARN_ON_ONCE(!lockdep_sock_is_held(sk) && debug_locks);
#endif
+}
+
+static inline bool sock_owned_by_user(const struct sock *sk)
+{
+ sock_owned_by_me(sk);
return sk->sk_lock.owned;
}

diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 6171f92be0903f5a5d17f027dbe6b31829bcc043..a914e0607895dd9321559f93c1008f8de13b73ad 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -3355,9 +3355,10 @@ static void tcp_snd_una_update(struct tcp_sock *tp, u32 ack)
{
u32 delta = ack - tp->snd_una;

- u64_stats_update_begin(&tp->syncp);
+ sock_owned_by_me((struct sock *)tp);
+ u64_stats_update_begin_raw(&tp->syncp);
tp->bytes_acked += delta;
- u64_stats_update_end(&tp->syncp);
+ u64_stats_update_end_raw(&tp->syncp);
tp->snd_una = ack;
}

@@ -3366,9 +3367,10 @@ static void tcp_rcv_nxt_update(struct tcp_sock *tp, u32 seq)
{
u32 delta = seq - tp->rcv_nxt;

- u64_stats_update_begin(&tp->syncp);
+ sock_owned_by_me((struct sock *)tp);
+ u64_stats_update_begin_raw(&tp->syncp);
tp->bytes_received += delta;
- u64_stats_update_end(&tp->syncp);
+ u64_stats_update_end_raw(&tp->syncp);
tp->rcv_nxt = seq;
}




2016-05-04 01:26:51

by Fabio Estevam

[permalink] [raw]
Subject: Re: [PATCH net-next] tcp: fix lockdep splat in tcp_snd_una_update()

On Tue, May 3, 2016 at 8:56 PM, Eric Dumazet <[email protected]> wrote:
> From: Eric Dumazet <[email protected]>
>
> tcp_snd_una_update() and tcp_rcv_nxt_update() call
> u64_stats_update_begin() either from process context or BH handler.
>
> This triggers a lockdep splat on 32bit & SMP builds.
>
> We could add u64_stats_update_begin_bh() variant but this would
> slow down 32bit builds with useless local_disable_bh() and
> local_enable_bh() pairs, since we own the socket lock at this point.
>
> I add sock_owned_by_me() helper to have proper lockdep support
> even on 64bit builds, and new u64_stats_update_begin_raw()
> and u64_stats_update_end_raw methods.
>
> Fixes: c10d9310edf5 ("tcp: do not assume TCP code is non preemptible")
> Reported-by: Fabio Estevam <[email protected]>
> Diagnosed-by: Francois Romieu <[email protected]>
> Signed-off-by: Eric Dumazet <[email protected]>

Thanks for the fix, Eric and Francois! This allows me to do NFS boot again:

Tested-by: Fabio Estevam <[email protected]>

2016-05-04 04:54:46

by David Miller

[permalink] [raw]
Subject: Re: [PATCH net-next] tcp: fix lockdep splat in tcp_snd_una_update()

From: Eric Dumazet <[email protected]>
Date: Tue, 03 May 2016 16:56:03 -0700

> From: Eric Dumazet <[email protected]>
>
> tcp_snd_una_update() and tcp_rcv_nxt_update() call
> u64_stats_update_begin() either from process context or BH handler.
>
> This triggers a lockdep splat on 32bit & SMP builds.
>
> We could add u64_stats_update_begin_bh() variant but this would
> slow down 32bit builds with useless local_disable_bh() and
> local_enable_bh() pairs, since we own the socket lock at this point.
>
> I add sock_owned_by_me() helper to have proper lockdep support
> even on 64bit builds, and new u64_stats_update_begin_raw()
> and u64_stats_update_end_raw methods.
>
> Fixes: c10d9310edf5 ("tcp: do not assume TCP code is non preemptible")
> Reported-by: Fabio Estevam <[email protected]>
> Diagnosed-by: Francois Romieu <[email protected]>
> Signed-off-by: Eric Dumazet <[email protected]>

Applied.