Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tests get stuck. #261

Closed
navytux opened this issue Jan 31, 2019 · 25 comments
Closed

Tests get stuck. #261

navytux opened this issue Jan 31, 2019 · 25 comments

Comments

@navytux
Copy link
Contributor

navytux commented Jan 31, 2019

I was trying to run go-fuse testsuite in repeated mode and after some 10-20-30 iterations the tests get stuck:

src/github.com/hanwen/go-fuse$ while true; do echo -e '\n# repeat'; go test -count 1 ./...; done
...

# repeat
ok      github.com/hanwen/go-fuse/benchmark     0.058s
?       github.com/hanwen/go-fuse/benchmark/bulkstat    [no test files]
?       github.com/hanwen/go-fuse/example/autounionfs   [no test files]
?       github.com/hanwen/go-fuse/example/benchmark-read-throughput     [no test files]
?       github.com/hanwen/go-fuse/example/hello [no test files]
?       github.com/hanwen/go-fuse/example/loopback      [no test files]
?       github.com/hanwen/go-fuse/example/memfs [no test files]
?       github.com/hanwen/go-fuse/example/multizip      [no test files]
?       github.com/hanwen/go-fuse/example/statfs        [no test files]
?       github.com/hanwen/go-fuse/example/unionfs       [no test files]
?       github.com/hanwen/go-fuse/example/zipfs [no test files]
ok      github.com/hanwen/go-fuse/fuse  0.002s
ok      github.com/hanwen/go-fuse/fuse/nodefs   0.235s
ok      github.com/hanwen/go-fuse/fuse/pathfs   0.207s
ok      github.com/hanwen/go-fuse/fuse/test     3.037s
?       github.com/hanwen/go-fuse/internal/testutil     [no test files]
?       github.com/hanwen/go-fuse/internal/utimens      [no test files]
ok      github.com/hanwen/go-fuse/splice        0.011s
ok      github.com/hanwen/go-fuse/unionfs       2.892s
ok      github.com/hanwen/go-fuse/zipfs 0.114s

# repeat
ok      github.com/hanwen/go-fuse/benchmark     0.047s
?       github.com/hanwen/go-fuse/benchmark/bulkstat    [no test files]
?       github.com/hanwen/go-fuse/example/autounionfs   [no test files]
?       github.com/hanwen/go-fuse/example/benchmark-read-throughput     [no test files]
?       github.com/hanwen/go-fuse/example/hello [no test files]
?       github.com/hanwen/go-fuse/example/loopback      [no test files]
?       github.com/hanwen/go-fuse/example/memfs [no test files]
?       github.com/hanwen/go-fuse/example/multizip      [no test files]
?       github.com/hanwen/go-fuse/example/statfs        [no test files]
?       github.com/hanwen/go-fuse/example/unionfs       [no test files]
?       github.com/hanwen/go-fuse/example/zipfs [no test files]
ok      github.com/hanwen/go-fuse/fuse  0.003s
ok      github.com/hanwen/go-fuse/fuse/nodefs   0.242s
ok      github.com/hanwen/go-fuse/fuse/pathfs   0.292s
(no further output here)

inspecting the stuck process a bit:

kirr@deco:~$ cat /proc/12927/mounts |grep -i fuse
fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
nodefs.memNode /tmp/TestDeleteNotify043745505/mnt fuse.nodefs.memNode rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
nodefs.memNode /tmp/TestDeleteNotify041170318/mnt fuse.nodefs.memNode rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
nodefs.memNode /tmp/TestDeleteNotify074247721/mnt fuse.nodefs.memNode rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
pathfs.pathInode /tmp/TestNonseekable501982173 fuse.pathfs.pathInode rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
nodefs.memNode /tmp/TestDeleteNotify426583496/mnt fuse.nodefs.memNode rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
Locked(pathfs.pathIn /tmp/TestRecursiveMount699955034/mnt fuse.Locked(pathfs.pathIn rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
Locked(pathfs.pathIn /tmp/TestLookupKnownChildrenAttrCopied546363126/mnt fuse.Locked(pathfs.pathIn rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
nodefs.memNode /tmp/TestDeleteNotify591838373/mnt fuse.nodefs.memNode rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
pathfs.pathInode /tmp/TestUnionFsDropDeletionCache497637161/mnt fuse.pathfs.pathInode rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
Locked(pathfs.pathIn /tmp/TestRecursiveMount577527402/mnt fuse.Locked(pathfs.pathIn rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
pathfs.pathInode /tmp/TestUnionFsRenameDirAllSourcesGone103878418/mnt fuse.pathfs.pathInode rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
nodefs.nodeReadNode /tmp/nodefs272940596 fuse.nodefs.nodeReadNode rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
nodefs.memNode /tmp/TestDeleteNotify228516545/mnt fuse.nodefs.memNode rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0

kirr@deco:~$ ll /proc/12927/task/
итого 0
dr-xr-xr-x 7 kirr kirr 0 янв 31 11:42 12927

i.e. single thread.

kirr@deco:~$ strace -t -t -p 12927
strace: Process 12927 attached
(no further output)

i.e. it is blocked in a syscall. Syscall details:

root@deco:/home/kirr# cat /proc/12927/stack
[<0>] request_wait_answer+0x12b/0x210 [fuse]
[<0>] __fuse_request_send+0x64/0x90 [fuse]
[<0>] fuse_simple_request+0xcd/0x190 [fuse]
[<0>] fuse_dentry_revalidate+0x1a8/0x300 [fuse]
[<0>] lookup_fast+0x275/0x2e0
[<0>] walk_component+0x48/0x4a0
[<0>] path_lookupat.isra.48+0x6d/0x220
[<0>] filename_lookup.part.62+0xa0/0x170
[<0>] ksys_chdir+0x3e/0xc0
[<0>] __x64_sys_chdir+0xe/0x20
[<0>] do_syscall_64+0x53/0x100
[<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
[<0>] 0xffffffffffffffff

I had only a brief quick look and had not inspected further.

@rfjakob
Copy link
Contributor

rfjakob commented Jan 31, 2019

I suggest kill -QUIT on the stuck test to get a backtrace

@navytux
Copy link
Contributor Author

navytux commented Jan 31, 2019

kill -QUIT 12927 does not work for me - the process is not unstuck. Its likely in an uniterruptable wait in the kernel or that we don't handle interrupt requests (#15)

@hanwen
Copy link
Owner

hanwen commented Jan 31, 2019

you can kill by writing into the fuse control connection, eg.

echo 1 > /sys/fs/fuse/connections/47/abort

this should get it unstuck so you can kill the process and unmount

@navytux
Copy link
Contributor Author

navytux commented Jan 31, 2019

Yes, this is how I was stopping it. Sorry I did not digged for more information on how/where it got stuck for now.

@navytux
Copy link
Contributor Author

navytux commented Jan 31, 2019

Yes, this is how I was stopping it. Sorry I did not digged for more information on how/where it got stuck for now.

For completeness - for some of the stuck processes, even after corresponding echo 1 > /sys/fs/fuse/connections/X/abort the filesystem cannot be unmounted (umount gives target is busy) and the process cannot be killed.

@navytux
Copy link
Contributor Author

navytux commented Jan 31, 2019

and the process cannot be killed

Even kill -9 does not have the effect. This for sure tells that the kernel is in some uninterruptible wait. I have two such processes on my system and for both the kernel is waiting for answer to LOOKUP triggered by chdir:

root@deco:/home/kirr# cat /proc/6319/stack 
[<0>] request_wait_answer+0x12b/0x210 [fuse]
[<0>] __fuse_request_send+0x64/0x90 [fuse]
[<0>] fuse_simple_request+0xcd/0x190 [fuse]
[<0>] fuse_dentry_revalidate+0x1a8/0x300 [fuse]
[<0>] lookup_fast+0x275/0x2e0
[<0>] walk_component+0x48/0x4a0
[<0>] path_lookupat.isra.48+0x6d/0x220
[<0>] filename_lookup.part.62+0xa0/0x170
[<0>] ksys_chdir+0x3e/0xc0
[<0>] __x64_sys_chdir+0xe/0x20
[<0>] do_syscall_64+0x53/0x100
[<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
[<0>] 0xffffffffffffffff
root@deco:/home/kirr# cat /proc/12927/stack 
[<0>] request_wait_answer+0x12b/0x210 [fuse]
[<0>] __fuse_request_send+0x64/0x90 [fuse]
[<0>] fuse_simple_request+0xcd/0x190 [fuse]
[<0>] fuse_dentry_revalidate+0x1a8/0x300 [fuse]
[<0>] lookup_fast+0x275/0x2e0
[<0>] walk_component+0x48/0x4a0
[<0>] path_lookupat.isra.48+0x6d/0x220
[<0>] filename_lookup.part.62+0xa0/0x170
[<0>] ksys_chdir+0x3e/0xc0
[<0>] __x64_sys_chdir+0xe/0x20
[<0>] do_syscall_64+0x53/0x100
[<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
[<0>] 0xffffffffffffffff

@hanwen
Copy link
Owner

hanwen commented Feb 4, 2019

if you do a kill -QUIT and then abort FUSE through the /sys/fs you should be able to get a stacktrace. Can you figure out which test is the one causing the hang?

@navytux
Copy link
Contributor Author

navytux commented Feb 5, 2019

Ok, here is what I get this way:

...
SIGQUIT: quit
PC=0x45c593 m=0 sigcode=0

goroutine 0 [idle]:
runtime.futex(0x78df40, 0x80, 0x7ffcdf7c5de8, 0x0, 0x0, 0x7ffcdf7c5e00, 0x0, 0x186a0, 0x7ffcdf7c5e00, 0x40b07e, ...)
        /home/kirr/src/tools/go/go/src/runtime/sys_linux_amd64.s:532 +0x23 fp=0x7ffcdf7c5db8 sp=0x7ffcdf7c5db0 pc=0x45c593
runtime.futexsleep(0x78df40, 0x0, 0x186a0)
        /home/kirr/src/tools/go/go/src/runtime/os_linux.go:63 +0xc0 fp=0x7ffcdf7c5e08 sp=0x7ffcdf7c5db8 pc=0x4291d0
runtime.notetsleep_internal(0x78df40, 0x186a0, 0x7ffcdf7c5e00)
        /home/kirr/src/tools/go/go/src/runtime/lock_futex.go:193 +0x12e fp=0x7ffcdf7c5e40 sp=0x7ffcdf7c5e08 pc=0x40b07e
runtime.notetsleep(0x78df40, 0x186a0, 0x7ffcdf7eab00)
        /home/kirr/src/tools/go/go/src/runtime/lock_futex.go:216 +0x54 fp=0x7ffcdf7c5e68 sp=0x7ffcdf7c5e40 pc=0x40b154
runtime.stopTheWorldWithSema()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:1109 +0x26c fp=0x7ffcdf7c5ed0 sp=0x7ffcdf7c5e68 pc=0x42fe4c
runtime.systemstack(0x458569)
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:351 +0x66 fp=0x7ffcdf7c5ed8 sp=0x7ffcdf7c5ed0 pc=0x4586d6
runtime.mstart()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:1229 fp=0x7ffcdf7c5ee0 sp=0x7ffcdf7c5ed8 pc=0x430130

goroutine 163 [running]:
runtime.systemstack_switch()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:311 fp=0xc000036528 sp=0xc000036520 pc=0x458660
runtime.gcStart(0x0, 0x1, 0x0, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/mgc.go:1316 +0x1ff fp=0xc000036558 sp=0xc000036528 pc=0x419a0f
runtime.mallocgc(0x12000, 0x5acee0, 0x1, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/malloc.go:996 +0x40e fp=0xc0000365f8 sp=0xc000036558 pc=0x40c2be
runtime.makeslice(0x5acee0, 0x11000, 0x11000, 0x3, 0x80, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/slice.go:70 +0x77 fp=0xc000036628 sp=0xc0000365f8 pc=0x4419f7
github.com/hanwen/go-fuse/fuse.NewServer.func2(0xc000192150, 0x0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:173 +0x4a fp=0xc000036680 sp=0xc000036628 pc=0x531efa
sync.(*Pool).Get(0xc000192150, 0x5d6f40, 0xc0000ff200)
        /home/kirr/src/tools/go/go/src/sync/pool.go:151 +0xa6 fp=0xc0000366c8 sp=0xc000036680 pc=0x462cf6
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0001920f0, 0x606001, 0xc0001921cc, 0x0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:259 +0xac fp=0xc000036788 sp=0xc0000366c8 pc=0x52c46c
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0001920f0, 0xc00030f201)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:381 +0x6b fp=0xc0000367d0 sp=0xc000036788 pc=0x52d05b
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0000367d8 sp=0xc0000367d0 pc=0x45a741
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:291 +0x2d8

goroutine 1 [chan receive]:
runtime.gopark(0x605e88, 0xc00031cc58, 0xc0000a170d, 0x3)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc0000abb58 sp=0xc0000abb38 pc=0x42d5ab
runtime.goparkunlock(0xc00031cc58, 0x170d, 0x3)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc0000abb88 sp=0xc0000abb58 pc=0x42d653
runtime.chanrecv(0xc00031cc00, 0xc0000abc9f, 0xc000000301, 0x4d04bc)
        /home/kirr/src/tools/go/go/src/runtime/chan.go:520 +0x2be fp=0xc0000abc18 sp=0xc0000abb88 pc=0x40654e
runtime.chanrecv1(0xc00031cc00, 0xc0000abc9f)
        /home/kirr/src/tools/go/go/src/runtime/chan.go:402 +0x2b fp=0xc0000abc48 sp=0xc0000abc18 pc=0x40627b
testing.(*T).Run(0xc00018a100, 0x5fc286, 0x10, 0x6058d0, 0x474701)
        /home/kirr/src/tools/go/go/src/testing/testing.go:879 +0x383 fp=0xc0000abd00 sp=0xc0000abc48 pc=0x4d04e3
testing.runTests.func1(0xc0000e8000)
        /home/kirr/src/tools/go/go/src/testing/testing.go:1119 +0x78 fp=0xc0000abd50 sp=0xc0000abd00 pc=0x4d41b8
testing.tRunner(0xc0000e8000, 0xc0000abe08)
        /home/kirr/src/tools/go/go/src/testing/testing.go:827 +0xbf fp=0xc0000abd78 sp=0xc0000abd50 pc=0x4d00ff
testing.runTests(0xc000094160, 0x78a9c0, 0x3e, 0x3e, 0x40c19f)
        /home/kirr/src/tools/go/go/src/testing/testing.go:1117 +0x2aa fp=0xc0000abe38 sp=0xc0000abd78 pc=0x4d199a
testing.(*M).Run(0xc0000e6000, 0x0)
        /home/kirr/src/tools/go/go/src/testing/testing.go:1034 +0x165 fp=0xc0000abf30 sp=0xc0000abe38 pc=0x4d08e5
main.main()
        _testmain.go:164 +0x13d fp=0xc0000abf98 sp=0xc0000abf30 pc=0x58d61d
runtime.main()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:201 +0x207 fp=0xc0000abfe0 sp=0xc0000abf98 pc=0x42d1b7
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0000abfe8 sp=0xc0000abfe0 pc=0x45a741

goroutine 2 [force gc (idle)]:
runtime.gopark(0x605e88, 0x78d920, 0x1410, 0x1)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc000034f80 sp=0xc000034f60 pc=0x42d5ab
runtime.goparkunlock(0x78d920, 0x1410, 0x1)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc000034fb0 sp=0xc000034f80 pc=0x42d653
runtime.forcegchelper()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:251 +0xb3 fp=0xc000034fe0 sp=0xc000034fb0 pc=0x42d423
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc000034fe8 sp=0xc000034fe0 pc=0x45a741
created by runtime.init.4
        /home/kirr/src/tools/go/go/src/runtime/proc.go:240 +0x35

goroutine 3 [GC sweep wait]:
runtime.gopark(0x605e88, 0x78da80, 0x41140c, 0x1)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc000035780 sp=0xc000035760 pc=0x42d5ab
runtime.goparkunlock(0x78da80, 0x62140c, 0x1)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc0000357b0 sp=0xc000035780 pc=0x42d653
runtime.bgsweep(0xc00001a070)
        /home/kirr/src/tools/go/go/src/runtime/mgcsweep.go:52 +0x8f fp=0xc0000357d8 sp=0xc0000357b0 pc=0x41fa7f
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0000357e0 sp=0xc0000357d8 pc=0x45a741
created by runtime.gcenable
        /home/kirr/src/tools/go/go/src/runtime/mgc.go:216 +0x58

goroutine 18 [finalizer wait]:
runtime.gopark(0x605e88, 0x7a9f48, 0x140f, 0x1)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc000030728 sp=0xc000030708 pc=0x42d5ab
runtime.goparkunlock(0x7a9f48, 0x140f, 0x1)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc000030758 sp=0xc000030728 pc=0x42d653
runtime.runfinq()
        /home/kirr/src/tools/go/go/src/runtime/mfinal.go:175 +0x99 fp=0xc0000307e0 sp=0xc000030758 pc=0x417439
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0000307e8 sp=0xc0000307e0 pc=0x45a741
created by runtime.createfing
        /home/kirr/src/tools/go/go/src/runtime/mfinal.go:156 +0x61

goroutine 44 [running]:
        goroutine running on other thread; stack unavailable
created by testing.(*T).Run
        /home/kirr/src/tools/go/go/src/testing/testing.go:878 +0x35c

goroutine 15 [semacquire]:
runtime.gopark(0x605e88, 0x799a60, 0xc000021911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc0000345c8 sp=0xc0000345a8 pc=0x42d5ab
runtime.goparkunlock(0x799a60, 0xc000191911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc0000345f8 sp=0xc0000345c8 pc=0x42d653
runtime.semacquire1(0xc00019216c, 0x43f000, 0x3)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:144 +0x1bc fp=0xc000034660 sp=0xc0000345f8 pc=0x43e05c
sync.runtime_SemacquireMutex(0xc00019216c, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:71 +0x3d fp=0xc000034688 sp=0xc000034660 pc=0x43dd8d
sync.(*Mutex).Lock(0xc000192168)
        /home/kirr/src/tools/go/go/src/sync/mutex.go:134 +0xff fp=0xc0000346c8 sp=0xc000034688 pc=0x4626ff
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0001920f0, 0x606001, 0xc0001921cc, 0x4d00ff)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:253 +0x4b fp=0xc000034788 sp=0xc0000346c8 pc=0x52c40b
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0001920f0, 0xc00030f101)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:381 +0x6b fp=0xc0000347d0 sp=0xc000034788 pc=0x52d05b
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0000347d8 sp=0xc0000347d0 pc=0x45a741
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:291 +0x2d8

goroutine 13 [semacquire]:
runtime.gopark(0x605e88, 0x799a60, 0xc000021911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc0002a7dc8 sp=0xc0002a7da8 pc=0x42d5ab
runtime.goparkunlock(0x799a60, 0xc000191911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc0002a7df8 sp=0xc0002a7dc8 pc=0x42d653
runtime.semacquire1(0xc00019216c, 0x43f000, 0x3)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:144 +0x1bc fp=0xc0002a7e60 sp=0xc0002a7df8 pc=0x43e05c
sync.runtime_SemacquireMutex(0xc00019216c, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:71 +0x3d fp=0xc0002a7e88 sp=0xc0002a7e60 pc=0x43dd8d
sync.(*Mutex).Lock(0xc000192168)
        /home/kirr/src/tools/go/go/src/sync/mutex.go:134 +0xff fp=0xc0002a7ec8 sp=0xc0002a7e88 pc=0x4626ff
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0001920f0, 0x606001, 0xc0001921cc, 0x0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:253 +0x4b fp=0xc0002a7f88 sp=0xc0002a7ec8 pc=0x52c40b
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0001920f0, 0xc00030f101)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:381 +0x6b fp=0xc0002a7fd0 sp=0xc0002a7f88 pc=0x52d05b
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0002a7fd8 sp=0xc0002a7fd0 pc=0x45a741
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:291 +0x2d8

goroutine 26 [GC worker (idle)]:
runtime.gopark(0x605d50, 0xc000226690, 0xc000031417, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc000030f60 sp=0xc000030f40 pc=0x42d5ab
runtime.gcBgMarkWorker(0xc000022000)
        /home/kirr/src/tools/go/go/src/runtime/mgc.go:1772 +0xfc fp=0xc000030fd8 sp=0xc000030f60 pc=0x41ad2c
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc000030fe0 sp=0xc000030fd8 pc=0x45a741
created by runtime.gcBgMarkStartWorkers
        /home/kirr/src/tools/go/go/src/runtime/mgc.go:1720 +0x77

goroutine 179 [GC worker (idle)]:
runtime.gopark(0x605d50, 0xc0002266c0, 0xc0002e1417, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc0002a3760 sp=0xc0002a3740 pc=0x42d5ab
runtime.gcBgMarkWorker(0xc000028f00)
        /home/kirr/src/tools/go/go/src/runtime/mgc.go:1772 +0xfc fp=0xc0002a37d8 sp=0xc0002a3760 pc=0x41ad2c
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0002a37e0 sp=0xc0002a37d8 pc=0x45a741
created by runtime.gcBgMarkStartWorkers
        /home/kirr/src/tools/go/go/src/runtime/mgc.go:1720 +0x77

goroutine 12 [semacquire]:
runtime.gopark(0x605e88, 0x799a60, 0xc000021911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc0002b6dc8 sp=0xc0002b6da8 pc=0x42d5ab
runtime.goparkunlock(0x799a60, 0xc000191911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc0002b6df8 sp=0xc0002b6dc8 pc=0x42d653
runtime.semacquire1(0xc00019216c, 0x43f000, 0x3)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:144 +0x1bc fp=0xc0002b6e60 sp=0xc0002b6df8 pc=0x43e05c
sync.runtime_SemacquireMutex(0xc00019216c, 0xc00031f100)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:71 +0x3d fp=0xc0002b6e88 sp=0xc0002b6e60 pc=0x43dd8d
sync.(*Mutex).Lock(0xc000192168)
        /home/kirr/src/tools/go/go/src/sync/mutex.go:134 +0xff fp=0xc0002b6ec8 sp=0xc0002b6e88 pc=0x4626ff
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0001920f0, 0x606001, 0xc0001921cc, 0xc00031f1a0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:253 +0x4b fp=0xc0002b6f88 sp=0xc0002b6ec8 pc=0x52c40b
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0001920f0, 0xc00030f101)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:381 +0x6b fp=0xc0002b6fd0 sp=0xc0002b6f88 pc=0x52d05b
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0002b6fd8 sp=0xc0002b6fd0 pc=0x45a741
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:291 +0x2d8

goroutine 162 [semacquire]:
runtime.gopark(0x605e88, 0x799a60, 0xc000021911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc0002b75c8 sp=0xc0002b75a8 pc=0x42d5ab
runtime.goparkunlock(0x799a60, 0xc000191911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc0002b75f8 sp=0xc0002b75c8 pc=0x42d653
runtime.semacquire1(0xc00019216c, 0x43f000, 0x3)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:144 +0x1bc fp=0xc0002b7660 sp=0xc0002b75f8 pc=0x43e05c
sync.runtime_SemacquireMutex(0xc00019216c, 0x482200)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:71 +0x3d fp=0xc0002b7688 sp=0xc0002b7660 pc=0x43dd8d
sync.(*Mutex).Lock(0xc000192168)
        /home/kirr/src/tools/go/go/src/sync/mutex.go:134 +0xff fp=0xc0002b76c8 sp=0xc0002b7688 pc=0x4626ff
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0001920f0, 0x606001, 0xc0001921cc, 0x433b69)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:253 +0x4b fp=0xc0002b7788 sp=0xc0002b76c8 pc=0x52c40b
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0001920f0, 0xc00030f201)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:381 +0x6b fp=0xc0002b77d0 sp=0xc0002b7788 pc=0x52d05b
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0002b77d8 sp=0xc0002b77d0 pc=0x45a741
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:291 +0x2d8

goroutine 16 [semacquire]:
runtime.gopark(0x605e88, 0x799a60, 0xc000021911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc0002b7dc8 sp=0xc0002b7da8 pc=0x42d5ab
runtime.goparkunlock(0x799a60, 0xc000191911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc0002b7df8 sp=0xc0002b7dc8 pc=0x42d653
runtime.semacquire1(0xc00019216c, 0x43f000, 0x3)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:144 +0x1bc fp=0xc0002b7e60 sp=0xc0002b7df8 pc=0x43e05c
sync.runtime_SemacquireMutex(0xc00019216c, 0x482200)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:71 +0x3d fp=0xc0002b7e88 sp=0xc0002b7e60 pc=0x43dd8d
sync.(*Mutex).Lock(0xc000192168)
        /home/kirr/src/tools/go/go/src/sync/mutex.go:134 +0xff fp=0xc0002b7ec8 sp=0xc0002b7e88 pc=0x4626ff
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0001920f0, 0x606001, 0xc0001921cc, 0x433b69)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:253 +0x4b fp=0xc0002b7f88 sp=0xc0002b7ec8 pc=0x52c40b
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0001920f0, 0xc00030f101)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:381 +0x6b fp=0xc0002b7fd0 sp=0xc0002b7f88 pc=0x52d05b
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0002b7fd8 sp=0xc0002b7fd0 pc=0x45a741
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:291 +0x2d8

goroutine 45 [runnable]:
syscall.Syscall(0x0, 0x7, 0xc00048c000, 0x11000, 0x30, 0x11000, 0x0)
        /home/kirr/src/tools/go/go/src/syscall/asm_linux_amd64.s:18 +0x5 fp=0xc000043d20 sp=0xc000043d18 pc=0x46d935
syscall.read(0x7, 0xc00048c000, 0x11000, 0x11000, 0xc000192138, 0xc00015e600, 0xc000000000)
        /home/kirr/src/tools/go/go/src/syscall/zsyscall_linux_amd64.go:732 +0x5a fp=0xc000043d78 sp=0xc000043d20 pc=0x46baea
syscall.Read(0x7, 0xc00048c000, 0x11000, 0x11000, 0x462cbb, 0xc000192150, 0xc00015e800)
        /home/kirr/src/tools/go/go/src/syscall/syscall_unix.go:172 +0x49 fp=0xc000043dc0 sp=0xc000043d78 pc=0x469989
github.com/hanwen/go-fuse/fuse.(*Server).readRequest.func1(0xc00015e800, 0xc000113140)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:266 +0x55 fp=0xc000043e10 sp=0xc000043dc0 pc=0x531fb5
github.com/hanwen/go-fuse/fuse.handleEINTR(0xc000043ec0, 0x5aa880, 0xc00030f340)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:242 +0x27 fp=0xc000043e30 sp=0xc000043e10 pc=0x52c377
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0001920f0, 0xc000112f00, 0xc000000000, 0x0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:264 +0x163 fp=0xc000043ef0 sp=0xc000043e30 pc=0x52c523
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0001920f0, 0x0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:381 +0x6b fp=0xc000043f38 sp=0xc000043ef0 pc=0x52d05b
github.com/hanwen/go-fuse/fuse.(*Server).Serve(0xc0001920f0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:331 +0x6d fp=0xc000043fd8 sp=0xc000043f38 pc=0x52cdad
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc000043fe0 sp=0xc000043fd8 pc=0x45a741
created by github.com/hanwen/go-fuse/fuse/test.TestDeleteNotify
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/test/delete_linux_test.go:54 +0x2d8

goroutine 161 [GC worker (idle)]:
runtime.gopark(0x605d50, 0xc0002266a0, 0xffffffffffff1417, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc0002cb760 sp=0xc0002cb740 pc=0x42d5ab
runtime.gcBgMarkWorker(0xc000024500)
        /home/kirr/src/tools/go/go/src/runtime/mgc.go:1772 +0xfc fp=0xc0002cb7d8 sp=0xc0002cb760 pc=0x41ad2c
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0002cb7e0 sp=0xc0002cb7d8 pc=0x45a741
created by runtime.gcBgMarkStartWorkers
        /home/kirr/src/tools/go/go/src/runtime/mgc.go:1720 +0x77

goroutine 178 [GC worker (idle)]:
runtime.gopark(0x605d50, 0xc0002266b0, 0xc000301417, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc0002d6f60 sp=0xc0002d6f40 pc=0x42d5ab
runtime.gcBgMarkWorker(0xc000026a00)
        /home/kirr/src/tools/go/go/src/runtime/mgc.go:1772 +0xfc fp=0xc0002d6fd8 sp=0xc0002d6f60 pc=0x41ad2c
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0002d6fe0 sp=0xc0002d6fd8 pc=0x45a741
created by runtime.gcBgMarkStartWorkers
        /home/kirr/src/tools/go/go/src/runtime/mgc.go:1720 +0x77

goroutine 14 [semacquire]:
runtime.gopark(0x605e88, 0x799a60, 0xc000021911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc0002d75c8 sp=0xc0002d75a8 pc=0x42d5ab
runtime.goparkunlock(0x799a60, 0xc000191911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc0002d75f8 sp=0xc0002d75c8 pc=0x42d653
runtime.semacquire1(0xc00019216c, 0x43f000, 0x3)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:144 +0x1bc fp=0xc0002d7660 sp=0xc0002d75f8 pc=0x43e05c
sync.runtime_SemacquireMutex(0xc00019216c, 0xc0002d7600)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:71 +0x3d fp=0xc0002d7688 sp=0xc0002d7660 pc=0x43dd8d
sync.(*Mutex).Lock(0xc000192168)
        /home/kirr/src/tools/go/go/src/sync/mutex.go:134 +0xff fp=0xc0002d76c8 sp=0xc0002d7688 pc=0x4626ff
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0001920f0, 0x606001, 0xc0001921cc, 0xc000000013)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:253 +0x4b fp=0xc0002d7788 sp=0xc0002d76c8 pc=0x52c40b
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0001920f0, 0xc00030f101)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:381 +0x6b fp=0xc0002d77d0 sp=0xc0002d7788 pc=0x52d05b
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0002d77d8 sp=0xc0002d77d0 pc=0x45a741
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:291 +0x2d8

goroutine 164 [semacquire]:
runtime.gopark(0x605e88, 0x799a60, 0xc000021911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc000036dc8 sp=0xc000036da8 pc=0x42d5ab
runtime.goparkunlock(0x799a60, 0xc000191911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc000036df8 sp=0xc000036dc8 pc=0x42d653
runtime.semacquire1(0xc00019216c, 0x43f000, 0x3)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:144 +0x1bc fp=0xc000036e60 sp=0xc000036df8 pc=0x43e05c
sync.runtime_SemacquireMutex(0xc00019216c, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:71 +0x3d fp=0xc000036e88 sp=0xc000036e60 pc=0x43dd8d
sync.(*Mutex).Lock(0xc000192168)
        /home/kirr/src/tools/go/go/src/sync/mutex.go:134 +0xff fp=0xc000036ec8 sp=0xc000036e88 pc=0x4626ff
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0001920f0, 0x606001, 0xc0001921cc, 0x0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:253 +0x4b fp=0xc000036f88 sp=0xc000036ec8 pc=0x52c40b
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0001920f0, 0xc00030f201)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:381 +0x6b fp=0xc000036fd0 sp=0xc000036f88 pc=0x52d05b
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc000036fd8 sp=0xc000036fd0 pc=0x45a741
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:291 +0x2d8

goroutine 165 [semacquire]:
runtime.gopark(0x605e88, 0x799a60, 0xc000021911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc0002c8dc8 sp=0xc0002c8da8 pc=0x42d5ab
runtime.goparkunlock(0x799a60, 0xc000191911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc0002c8df8 sp=0xc0002c8dc8 pc=0x42d653
runtime.semacquire1(0xc00019216c, 0x43f000, 0x3)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:144 +0x1bc fp=0xc0002c8e60 sp=0xc0002c8df8 pc=0x43e05c
sync.runtime_SemacquireMutex(0xc00019216c, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:71 +0x3d fp=0xc0002c8e88 sp=0xc0002c8e60 pc=0x43dd8d
sync.(*Mutex).Lock(0xc000192168)
        /home/kirr/src/tools/go/go/src/sync/mutex.go:134 +0xff fp=0xc0002c8ec8 sp=0xc0002c8e88 pc=0x4626ff
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0001920f0, 0x606001, 0xc0001921cc, 0x433b69)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:253 +0x4b fp=0xc0002c8f88 sp=0xc0002c8ec8 pc=0x52c40b
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0001920f0, 0xc00030f201)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:381 +0x6b fp=0xc0002c8fd0 sp=0xc0002c8f88 pc=0x52d05b
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0002c8fd8 sp=0xc0002c8fd0 pc=0x45a741
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:291 +0x2d8

goroutine 166 [semacquire]:
runtime.gopark(0x605e88, 0x799a60, 0x1911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc0000375c8 sp=0xc0000375a8 pc=0x42d5ab
runtime.goparkunlock(0x799a60, 0xc000191911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc0000375f8 sp=0xc0000375c8 pc=0x42d653
runtime.semacquire1(0xc00019216c, 0x43f000, 0x3)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:144 +0x1bc fp=0xc000037660 sp=0xc0000375f8 pc=0x43e05c
sync.runtime_SemacquireMutex(0xc00019216c, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:71 +0x3d fp=0xc000037688 sp=0xc000037660 pc=0x43dd8d
sync.(*Mutex).Lock(0xc000192168)
        /home/kirr/src/tools/go/go/src/sync/mutex.go:134 +0xff fp=0xc0000376c8 sp=0xc000037688 pc=0x4626ff
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0001920f0, 0x606001, 0xc0001921cc, 0x0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:253 +0x4b fp=0xc000037788 sp=0xc0000376c8 pc=0x52c40b
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0001920f0, 0xc00030f201)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:381 +0x6b fp=0xc0000377d0 sp=0xc000037788 pc=0x52d05b
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0000377d8 sp=0xc0000377d0 pc=0x45a741
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:291 +0x2d8

goroutine 167 [semacquire]:
runtime.gopark(0x605e88, 0x799a60, 0xc000021911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc000037dc8 sp=0xc000037da8 pc=0x42d5ab
runtime.goparkunlock(0x799a60, 0xc000191911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc000037df8 sp=0xc000037dc8 pc=0x42d653
runtime.semacquire1(0xc00019216c, 0x43f000, 0x3)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:144 +0x1bc fp=0xc000037e60 sp=0xc000037df8 pc=0x43e05c
sync.runtime_SemacquireMutex(0xc00019216c, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:71 +0x3d fp=0xc000037e88 sp=0xc000037e60 pc=0x43dd8d
sync.(*Mutex).Lock(0xc000192168)
        /home/kirr/src/tools/go/go/src/sync/mutex.go:134 +0xff fp=0xc000037ec8 sp=0xc000037e88 pc=0x4626ff
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0001920f0, 0x606001, 0xc0001921cc, 0x0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:253 +0x4b fp=0xc000037f88 sp=0xc000037ec8 pc=0x52c40b
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0001920f0, 0xc00030f201)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:381 +0x6b fp=0xc000037fd0 sp=0xc000037f88 pc=0x52d05b
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc000037fd8 sp=0xc000037fd0 pc=0x45a741
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:291 +0x2d8

goroutine 168 [semacquire]:
runtime.gopark(0x605e88, 0x799a60, 0xc000021911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc0002d25c8 sp=0xc0002d25a8 pc=0x42d5ab
runtime.goparkunlock(0x799a60, 0xc000191911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc0002d25f8 sp=0xc0002d25c8 pc=0x42d653
runtime.semacquire1(0xc00019216c, 0x43f000, 0x3)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:144 +0x1bc fp=0xc0002d2660 sp=0xc0002d25f8 pc=0x43e05c
sync.runtime_SemacquireMutex(0xc00019216c, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:71 +0x3d fp=0xc0002d2688 sp=0xc0002d2660 pc=0x43dd8d
sync.(*Mutex).Lock(0xc000192168)
        /home/kirr/src/tools/go/go/src/sync/mutex.go:134 +0xff fp=0xc0002d26c8 sp=0xc0002d2688 pc=0x4626ff
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0001920f0, 0x606001, 0xc0001921cc, 0x0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:253 +0x4b fp=0xc0002d2788 sp=0xc0002d26c8 pc=0x52c40b
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0001920f0, 0xc00030f301)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:381 +0x6b fp=0xc0002d27d0 sp=0xc0002d2788 pc=0x52d05b
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0002d27d8 sp=0xc0002d27d0 pc=0x45a741
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:291 +0x2d8

goroutine 169 [semacquire]:
runtime.gopark(0x605e88, 0x799a60, 0xc000021911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc0002d2dc8 sp=0xc0002d2da8 pc=0x42d5ab
runtime.goparkunlock(0x799a60, 0xc000191911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc0002d2df8 sp=0xc0002d2dc8 pc=0x42d653
runtime.semacquire1(0xc00019216c, 0x43f000, 0x3)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:144 +0x1bc fp=0xc0002d2e60 sp=0xc0002d2df8 pc=0x43e05c
sync.runtime_SemacquireMutex(0xc00019216c, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:71 +0x3d fp=0xc0002d2e88 sp=0xc0002d2e60 pc=0x43dd8d
sync.(*Mutex).Lock(0xc000192168)
        /home/kirr/src/tools/go/go/src/sync/mutex.go:134 +0xff fp=0xc0002d2ec8 sp=0xc0002d2e88 pc=0x4626ff
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0001920f0, 0x606001, 0xc0001921cc, 0x0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:253 +0x4b fp=0xc0002d2f88 sp=0xc0002d2ec8 pc=0x52c40b
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0001920f0, 0xc00030f301)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:381 +0x6b fp=0xc0002d2fd0 sp=0xc0002d2f88 pc=0x52d05b
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0002d2fd8 sp=0xc0002d2fd0 pc=0x45a741
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:291 +0x2d8

goroutine 170 [semacquire]:
runtime.gopark(0x605e88, 0x799a60, 0xc000021911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:302 +0xeb fp=0xc0002d35c8 sp=0xc0002d35a8 pc=0x42d5ab
runtime.goparkunlock(0x799a60, 0xc000191911, 0x4)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:308 +0x53 fp=0xc0002d35f8 sp=0xc0002d35c8 pc=0x42d653
runtime.semacquire1(0xc00019216c, 0x43f000, 0x3)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:144 +0x1bc fp=0xc0002d3660 sp=0xc0002d35f8 pc=0x43e05c
sync.runtime_SemacquireMutex(0xc00019216c, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/sema.go:71 +0x3d fp=0xc0002d3688 sp=0xc0002d3660 pc=0x43dd8d
sync.(*Mutex).Lock(0xc000192168)
        /home/kirr/src/tools/go/go/src/sync/mutex.go:134 +0xff fp=0xc0002d36c8 sp=0xc0002d3688 pc=0x4626ff
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0001920f0, 0x606001, 0xc0001921cc, 0x0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:253 +0x4b fp=0xc0002d3788 sp=0xc0002d36c8 pc=0x52c40b
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0001920f0, 0xc00030f301)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:381 +0x6b fp=0xc0002d37d0 sp=0xc0002d3788 pc=0x52d05b
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0002d37d8 sp=0xc0002d37d0 pc=0x45a741
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:291 +0x2d8

rax    0xfffffffffffffffc
rbx    0x186a0
rcx    0x45c593
rdx    0x0
rdi    0x78df40
rsi    0x80
rbp    0x7ffcdf7c5df8
rsp    0x7ffcdf7c5db0SIGQUIT: quit
PC=0x45c593 m=2 sigcode=0

goroutine 0 [idle]:
runtime.futex(0x78df50, 0x80, 0x7f549bf84d50, 0x0, 0x7f5400000000, 0x45c1c6, 0x3c, 0x0, 0x7f549bf84d68, 0x40b07e, ...)
        /home/kirr/src/tools/go/go/src/runtime/sys_linux_amd64.s:532 +0x23 fp=0x7f549bf84d20 sp=0x7f549bf84d18 pc=0x45c593
runtime.futexsleep(0x78df50, 0x100000000, 0xdf8475800)
        /home/kirr/src/tools/go/go/src/runtime/os_linux.go:63 +0xc0 fp=0x7f549bf84d70 sp=0x7f549bf84d20 pc=0x4291d0
runtime.notetsleep_internal(0x78df50, 0xdf8475800, 0x138800)
        /home/kirr/src/tools/go/go/src/runtime/lock_futex.go:193 +0x12e fp=0x7f549bf84da8 sp=0x7f549bf84d70 pc=0x40b07e
runtime.notetsleep(0x78df50, 0xdf8475800, 0x1)
        /home/kirr/src/tools/go/go/src/runtime/lock_futex.go:216 +0x54 fp=0x7f549bf84dd0 sp=0x7f549bf84da8 pc=0x40b154
runtime.sysmon()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:4374 +0x173 fp=0x7f549bf84e58 sp=0x7f549bf84dd0 pc=0x437be3
runtime.mstart1()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:1282 +0xe6 fp=0x7f549bf84e80 sp=0x7f549bf84e58 pc=0x4302a6
runtime.mstart()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:1248 +0x6e fp=0x7f549bf84ea8 sp=0x7f549bf84e80 pc=0x43019e
rax    0xfffffffffffffffc
rbx    0x0
rcx    0x45c593
rdx    0x0
rdi    0x78df50
rsi    0x80
rbp    0x7f549bf84d60
rsp    0x7f549bf84d18
r8     0x0
r9     0x0
r10    0x7f549bf84d50
r11    0x246
r12    0x30
r13    0x11
r14    0x623374
r15    0x0
rip    0x45c593
rflags 0x246
cs     0x33
fs     0x0
gs     0x0

-----

SIGQUIT: quit
PC=0x45c591 m=3 sigcode=0

goroutine 0 [idle]:
runtime.futex(0xc000038840, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f549b783d28, 0x40aef2, ...)
        /home/kirr/src/tools/go/go/src/runtime/sys_linux_amd64.s:531 +0x21 fp=0x7f549b783cb0 sp=0x7f549b783ca8 pc=0x45c591
runtime.futexsleep(0xc000038840, 0x7f5400000000, 0xffffffffffffffff)
        /home/kirr/src/tools/go/go/src/runtime/os_linux.go:46 +0x4b fp=0x7f549b783d00 sp=0x7f549b783cb0 pc=0x42915b
runtime.notesleep(0xc000038840)
        /home/kirr/src/tools/go/go/src/runtime/lock_futex.go:151 +0xa2 fp=0x7f549b783d38 sp=0x7f549b783d00 pc=0x40aef2
runtime.stopm()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2016 +0xe3 fp=0x7f549b783d60 sp=0x7f549b783d38 pc=0x431713
runtime.findrunnable(0xc000028f00, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2487 +0x4dc fp=0x7f549b783e00 sp=0x7f549b783d60 pc=0x43288c
runtime.schedule()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2613 +0x13a fp=0x7f549b783e48 sp=0x7f549b783e00 pc=0x43339a
runtime.park_m(0xc0002a8f00)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2676 +0xae fp=0x7f549b783e78 sp=0x7f549b783e48 pc=0x4336be
runtime.mcall(0x800000)
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:299 +0x5b fp=0x7f549b783e88 sp=0x7f549b783e78 pc=0x45864b
rax    0xca
rbx    0xc000038700
rcx    0x45c593
rdx    0x0
rdi    0xc000038840
rsi    0x80
rbp    0x7f549b783cf0
rsp    0x7f549b783ca8
r8     0x0
r9     0x0
r10    0x0
r11    0x286
r12    0xffffffffffffffff
r13    0x6d
r14    0x6c
r15    0x200
rip    0x45c591
rflags 0x286
cs     0x33
fs     0x0
gs     0x0

-----

SIGQUIT: quit
PC=0x45c591 m=4 sigcode=0

goroutine 0 [idle]:
runtime.futex(0xc000038bc0, 0x80, 0x0, 0x0, 0x0, 0xc000022000, 0x0, 0x0, 0x7f549af82e10, 0x40aef2, ...)
        /home/kirr/src/tools/go/go/src/runtime/sys_linux_amd64.s:531 +0x21 fp=0x7f549af82d98 sp=0x7f549af82d90 pc=0x45c591
runtime.futexsleep(0xc000038bc0, 0xc000000000, 0xffffffffffffffff)
        /home/kirr/src/tools/go/go/src/runtime/os_linux.go:46 +0x4b fp=0x7f549af82de8 sp=0x7f549af82d98 pc=0x42915b
runtime.notesleep(0xc000038bc0)
        /home/kirr/src/tools/go/go/src/runtime/lock_futex.go:151 +0xa2 fp=0x7f549af82e20 sp=0x7f549af82de8 pc=0x40aef2
runtime.stopm()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2016 +0xe3 fp=0x7f549af82e48 sp=0x7f549af82e20 pc=0x431713
runtime.exitsyscall0(0xc0002d0900)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:3196 +0x107 fp=0x7f549af82e78 sp=0x7f549af82e48 pc=0x434ac7
runtime.mcall(0x800000)
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:299 +0x5b fp=0x7f549af82e88 sp=0x7f549af82e78 pc=0x45864b
rax    0xca
rbx    0xc000038a80
rcx    0x45c593
rdx    0x0
rdi    0xc000038bc0
rsi    0x80
rbp    0x7f549af82dd8
rsp    0x7f549af82d90
r8     0x0
r9     0x0
r10    0x0
r11    0x286
r12    0x30
r13    0x11
r14    0x623374
r15    0x0
rip    0x45c591
rflags 0x286
cs     0x33
fs     0x0
gs     0x0

-----

SIGQUIT: quit
PC=0x45c591 m=6 sigcode=0

goroutine 0 [idle]:
runtime.futex(0x7aa158, 0x80, 0x0, 0x0, 0x0, 0x7f5499f80e18, 0x0, 0x0, 0x7f5499f80e28, 0x40aef2, ...)
        /home/kirr/src/tools/go/go/src/runtime/sys_linux_amd64.s:531 +0x21 fp=0x7f5499f80db0 sp=0x7f5499f80da8 pc=0x45c591
runtime.futexsleep(0x7aa158, 0x7f5400000000, 0xffffffffffffffff)
        /home/kirr/src/tools/go/go/src/runtime/os_linux.go:46 +0x4b fp=0x7f5499f80e00 sp=0x7f5499f80db0 pc=0x42915b
runtime.notesleep(0x7aa158)
        /home/kirr/src/tools/go/go/src/runtime/lock_futex.go:151 +0xa2 fp=0x7f5499f80e38 sp=0x7f5499f80e00 pc=0x40aef2
runtime.templateThread()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:1993 +0xf9 fp=0x7f5499f80e58 sp=0x7f5499f80e38 pc=0x431609
runtime.mstart1()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:1282 +0xe6 fp=0x7f5499f80e80 sp=0x7f5499f80e58 pc=0x4302a6
runtime.mstart()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:1248 +0x6e fp=0x7f5499f80ea8 sp=0x7f5499f80e80 pc=0x43019e
rax    0xca
rbx    0xc000068380
rcx    0x45c593
rdx    0x0
rdi    0x7aa158
rsi    0x80
rbp    0x7f5499f80df0
rsp    0x7f5499f80da8
r8     0x0
r9     0x0
r10    0x0
r11    0x286
r12    0x7ffcdf7c5c3e
r13    0x7ffcdf7c5c3f
r14    0x7f5499f81700
r15    0x0
rip    0x45c591
rflags 0x286
cs     0x33
fs     0x0
gs     0x0

-----

SIGQUIT: quit
PC=0x45c740 m=7 sigcode=0

goroutine 0 [idle]:
runtime.epollwait(0x7f5400000004, 0x7f54996ff748, 0xffffffff00000080, 0xffffffff00000002, 0xffffffff00000001, 0x100000002, 0x0, 0x99745f0000000004, 0x400007f54, 0x7f5499745c90, ...)
        /home/kirr/src/tools/go/go/src/runtime/sys_linux_amd64.s:671 +0x20 fp=0x7f54996ff710 sp=0x7f54996ff708 pc=0x45c740
runtime.netpoll(0xc000028f01, 0xc000028f01)
        /home/kirr/src/tools/go/go/src/runtime/netpoll_epoll.go:71 +0x132 fp=0x7f54996ffd58 sp=0x7f54996ff710 pc=0x429012
runtime.findrunnable(0xc000022000, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2469 +0x51c fp=0x7f54996ffdf8 sp=0x7f54996ffd58 pc=0x4328cc
runtime.schedule()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2613 +0x13a fp=0x7f54996ffe40 sp=0x7f54996ffdf8 pc=0x43339a
runtime.goexit0(0xc0002b3e00)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2793 +0x1e4 fp=0x7f54996ffe78 sp=0x7f54996ffe40 pc=0x433d74
runtime.mcall(0x800000)
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:299 +0x5b fp=0x7f54996ffe88 sp=0x7f54996ffe78 pc=0x45864b
rax    0xfffffffffffffffc
rbx    0xffffffff
rcx    0x45c740
rdx    0x80
rdi    0x4
rsi    0x7f54996ff748
rbp    0x7f54996ffd48
rsp    0x7f54996ff708
r8     0x0
r9     0x3
r10    0xffffffff
r11    0x246
r12    0xffffffffffffffff
r13    0x3
r14    0x2
r15    0x10
rip    0x45c740
rflags 0x246
cs     0x33
fs     0x0
gs     0x0

-----

SIGQUIT: quit
PC=0x45c591 m=8 sigcode=0

goroutine 0 [idle]:
runtime.futex(0xc00018e840, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f5498efed28, 0x40aef2, ...)
        /home/kirr/src/tools/go/go/src/runtime/sys_linux_amd64.s:531 +0x21 fp=0x7f5498efecb0 sp=0x7f5498efeca8 pc=0x45c591
runtime.futexsleep(0xc00018e840, 0xc000000000, 0xffffffffffffffff)
        /home/kirr/src/tools/go/go/src/runtime/os_linux.go:46 +0x4b fp=0x7f5498efed00 sp=0x7f5498efecb0 pc=0x42915b
runtime.notesleep(0xc00018e840)
        /home/kirr/src/tools/go/go/src/runtime/lock_futex.go:151 +0xa2 fp=0x7f5498efed38 sp=0x7f5498efed00 pc=0x40aef2
runtime.stopm()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2016 +0xe3 fp=0x7f5498efed60 sp=0x7f5498efed38 pc=0x431713
runtime.findrunnable(0xc000028f00, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2487 +0x4dc fp=0x7f5498efee00 sp=0x7f5498efed60 pc=0x43288c
runtime.schedule()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2613 +0x13a fp=0x7f5498efee48 sp=0x7f5498efee00 pc=0x43339a
runtime.park_m(0xc0002b3e00)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2676 +0xae fp=0x7f5498efee78 sp=0x7f5498efee48 pc=0x4336be
runtime.mcall(0x800000)
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:299 +0x5b fp=0x7f5498efee88 sp=0x7f5498efee78 pc=0x45864b
rax    0xca
rbx    0xc00018e700
rcx    0x45c593
rdx    0x0
rdi    0xc00018e840
rsi    0x80
rbp    0x7f5498efecf0
rsp    0x7f5498efeca8
r8     0x0
r9     0x0
r10    0x0
r11    0x286
r12    0xffffffffffffffff
r13    0x7
r14    0x6
r15    0x10
rip    0x45c591
rflags 0x286
cs     0x33
fs     0x0
gs     0x0

-----

SIGQUIT: quit
PC=0x45c591 m=9 sigcode=0

goroutine 0 [idle]:
runtime.futex(0xc00020e140, 0x80, 0x0, 0x0, 0x7f5400000000, 0x2400, 0x0, 0x0, 0x7f5493ffee10, 0x40aef2, ...)
        /home/kirr/src/tools/go/go/src/runtime/sys_linux_amd64.s:531 +0x21 fp=0x7f5493ffed98 sp=0x7f5493ffed90 pc=0x45c591
runtime.futexsleep(0xc00020e140, 0x7f5400000000, 0xffffffffffffffff)
        /home/kirr/src/tools/go/go/src/runtime/os_linux.go:46 +0x4b fp=0x7f5493ffede8 sp=0x7f5493ffed98 pc=0x42915b
runtime.notesleep(0xc00020e140)
        /home/kirr/src/tools/go/go/src/runtime/lock_futex.go:151 +0xa2 fp=0x7f5493ffee20 sp=0x7f5493ffede8 pc=0x40aef2
runtime.stopm()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2016 +0xe3 fp=0x7f5493ffee48 sp=0x7f5493ffee20 pc=0x431713
runtime.exitsyscall0(0xc000001500)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:3196 +0x107 fp=0x7f5493ffee78 sp=0x7f5493ffee48 pc=0x434ac7
runtime.mcall(0x800000)
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:299 +0x5b fp=0x7f5493ffee88 sp=0x7f5493ffee78 pc=0x45864b
rax    0xca
rbx    0xc00020e000
rcx    0x45c593
rdx    0x0
rdi    0xc00020e140
rsi    0x80
rbp    0x7f5493ffedd8
rsp    0x7f5493ffed90
r8     0x0
r9     0x0
r10    0x0
r11    0x286
r12    0x4
r13    0x11
r14    0x6231e4
r15    0x0
rip    0x45c591
rflags 0x286
cs     0x33
fs     0x0
gs     0x0

-----

SIGQUIT: quit
PC=0x45c591 m=10 sigcode=0

goroutine 0 [idle]:
runtime.futex(0xc00018ef40, 0x80, 0x0, 0x0, 0x0, 0xc00018ef40, 0x0, 0x0, 0x7f54937fdd10, 0x40aef2, ...)
        /home/kirr/src/tools/go/go/src/runtime/sys_linux_amd64.s:531 +0x21 fp=0x7f54937fdc98 sp=0x7f54937fdc90 pc=0x45c591
runtime.futexsleep(0xc00018ef40, 0x0, 0xffffffffffffffff)
        /home/kirr/src/tools/go/go/src/runtime/os_linux.go:46 +0x4b fp=0x7f54937fdce8 sp=0x7f54937fdc98 pc=0x42915b
runtime.notesleep(0xc00018ef40)
        /home/kirr/src/tools/go/go/src/runtime/lock_futex.go:151 +0xa2 fp=0x7f54937fdd20 sp=0x7f54937fdce8 pc=0x40aef2
runtime.stopm()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2016 +0xe3 fp=0x7f54937fdd48 sp=0x7f54937fdd20 pc=0x431713
runtime.gcstopm()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2222 +0xb9 fp=0x7f54937fdd70 sp=0x7f54937fdd48 pc=0x4321d9
runtime.findrunnable(0xc000026a00, 0x0)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2277 +0x6b6 fp=0x7f54937fde10 sp=0x7f54937fdd70 pc=0x432a66
runtime.schedule()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:2613 +0x13a fp=0x7f54937fde58 sp=0x7f54937fde10 pc=0x43339a
runtime.mstart1()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:1292 +0x9d fp=0x7f54937fde80 sp=0x7f54937fde58 pc=0x43025d
runtime.mstart()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:1248 +0x6e fp=0x7f54937fdea8 sp=0x7f54937fde80 pc=0x43019e
rax    0xca
rbx    0xc00018ee00
rcx    0x45c593
rdx    0x0
rdi    0xc00018ef40
rsi    0x80
rbp    0x7f54937fdcd8
rsp    0x7f54937fdc90
r8     0x0
r9     0x0
r10    0x0
r11    0x286
r12    0x7f549bf84a1e
r13    0x7f549bf84a1f
r14    0x7f54937fe700
r15    0x0
rip    0x45c591
rflags 0x286
cs     0x33
fs     0x0
gs     0x0

-----

FAIL    github.com/hanwen/go-fuse/fuse/test     43.534s

r8     0x0
r9     0x0
r10    0x7ffcdf7c5de8
r11    0x206
r12    0x48
r13    0x32
r14    0x6232f0
r15    0x0
rip    0x45c593
rflags 0x206
cs     0x33
fs     0x0
gs     0x0

-----

(extracted with GOTRACEBACK=crash because else I was getting "goroutine running on other thread; stack unavailable" for some frames (golang/go#13161))

I cannot say I read the tracebacks well, but from what I could understand it stuck in TestDeleteNotify (see g45).

@navytux
Copy link
Contributor Author

navytux commented Feb 5, 2019

I found a second time and also found the tests stuck in TestDeleteNotify:

goroutine 49 [runnable]:
syscall.Syscall(0x0, 0x7, 0xc000496000, 0x11000, 0x30, 0x11000, 0x0)
        /home/kirr/src/tools/go/go/src/syscall/asm_linux_amd64.s:18 +0x5 fp=0xc0004acd20 sp=0xc0004acd18 pc=0x46d935
syscall.read(0x7, 0xc000496000, 0x11000, 0x11000, 0xc000480048, 0xc000134500, 0xc000000000)
        /home/kirr/src/tools/go/go/src/syscall/zsyscall_linux_amd64.go:732 +0x5a fp=0xc0004acd78 sp=0xc0004acd20 pc=0x46baea
syscall.Read(0x7, 0xc000496000, 0x11000, 0x11000, 0x462cbb, 0xc000480060, 0xc000134700)
        /home/kirr/src/tools/go/go/src/syscall/syscall_unix.go:172 +0x49 fp=0xc0004acdc0 sp=0xc0004acd78 pc=0x469989
github.com/hanwen/go-fuse/fuse.(*Server).readRequest.func1(0xc000134700, 0xc0001baa80)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:266 +0x55 fp=0xc0004ace10 sp=0xc0004acdc0 pc=0x531fb5
github.com/hanwen/go-fuse/fuse.handleEINTR(0xc0004acec0, 0x5aa880, 0xc000337a40)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:242 +0x27 fp=0xc0004ace30 sp=0xc0004ace10 pc=0x52c377
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc000480000, 0xc0001ba900, 0xc000000000, 0x0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:264 +0x163 fp=0xc0004acef0 sp=0xc0004ace30 pc=0x52c523
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc000480000, 0x0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:381 +0x6b fp=0xc0004acf38 sp=0xc0004acef0 pc=0x52d05b
github.com/hanwen/go-fuse/fuse.(*Server).Serve(0xc000480000)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:331 +0x6d fp=0xc0004acfd8 sp=0xc0004acf38 pc=0x52cdad
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc0004acfe0 sp=0xc0004acfd8 pc=0x45a741
created by github.com/hanwen/go-fuse/fuse/test.TestDeleteNotify
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/test/delete_linux_test.go:54 +0x2d8

@navytux
Copy link
Contributor Author

navytux commented Jun 18, 2019 via email

@hanwen
Copy link
Owner

hanwen commented Jul 20, 2019

is this still an issue?

@navytux
Copy link
Contributor Author

navytux commented Jul 20, 2019

Unfortunately yes - I've tried to run the tests in repeated mode (as described in #261 (comment)) and got it stuck on 6th cycle.

This time the stuck test is newunionfs.test:

$ src/github.com/hanwen/go-fuse$ while true; do echo -e '\n# repeat'; go test -count 1 ./...; done
# repeat
...
# repeat (6th iteration)
?       github.com/hanwen/go-fuse       [no test files]
ok      github.com/hanwen/go-fuse/benchmark     0.055s
?       github.com/hanwen/go-fuse/benchmark/bulkstat    [no test files]
?       github.com/hanwen/go-fuse/example/autounionfs   [no test files]
?       github.com/hanwen/go-fuse/example/benchmark-read-throughput     [no test files]
?       github.com/hanwen/go-fuse/example/hello [no test files]
?       github.com/hanwen/go-fuse/example/loopback      [no test files]
?       github.com/hanwen/go-fuse/example/memfs [no test files]
?       github.com/hanwen/go-fuse/example/multizip      [no test files]
?       github.com/hanwen/go-fuse/example/statfs        [no test files]
?       github.com/hanwen/go-fuse/example/unionfs       [no test files]
?       github.com/hanwen/go-fuse/example/zipfs [no test files]
ok      github.com/hanwen/go-fuse/fs    1.473s
ok      github.com/hanwen/go-fuse/fuse  0.008s
ok      github.com/hanwen/go-fuse/fuse/nodefs   0.177s
ok      github.com/hanwen/go-fuse/fuse/pathfs   0.188s
ok      github.com/hanwen/go-fuse/fuse/test     12.109s
ok      github.com/hanwen/go-fuse/internal      0.012s
?       github.com/hanwen/go-fuse/internal/testutil     [no test files]
?       github.com/hanwen/go-fuse/internal/utimens      [no test files]
# no further output here for ~ 10 minutes
$ ptree -pl
...
           |              |               |                     |             |-xterm(11441)---bash(11446)---go(16756)-+-newunionfs.test(17145)---{newunionfs.test}(17155)
           |              |               |                     |             |                                        |-{go}(16757)
           |              |               |                     |             |                                        |-{go}(16758)
           |              |               |                     |             |                                        |-{go}(16759)
           |              |               |                     |             |                                        |-{go}(16760)
           |              |               |                     |             |                                        |-{go}(16761)
           |              |               |                     |             |                                        |-{go}(16762)
           |              |               |                     |             |                                        |-{go}(16765)
           |              |               |                     |             |                                        |-{go}(16785)
           |              |               |                     |             |                                        |-{go}(16794)
           |              |               |                     |             |                                        |-{go}(16855)
           |              |               |                     |             |                                        |-{go}(16923)
           |              |               |                     |             |                                        |-{go}(16933)
           |              |               |                     |             |                                        |-{go}(16938)
           |              |               |                     |             |                                        `-{go}(17134)
root@deco:/home/kirr# cat /proc/17155/stack 
[<0>] request_wait_answer+0x12b/0x210 [fuse]
[<0>] __fuse_request_send+0x64/0x90 [fuse]
[<0>] fuse_simple_request+0xcd/0x190 [fuse]
[<0>] fuse_lookup_name+0x10e/0x220 [fuse]
[<0>] fuse_lookup+0x4f/0x130 [fuse]
[<0>] fuse_atomic_open+0xad/0x110 [fuse]
[<0>] path_openat+0x425/0x15c0
[<0>] do_filp_open+0xd6/0x100
[<0>] do_sys_open+0x186/0x210
[<0>] do_syscall_64+0x53/0x110
[<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
[<0>] 0xffffffffffffffff
root@deco:/home/kirr# cat /proc/17145/stack 
# emtpy

@navytux
Copy link
Contributor Author

navytux commented Jul 20, 2019

(neo) (z-dev) (g.env) kirr@deco:~/src/neo/src/github.com/hanwen/go-fuse$ git describe 
v1.0.0-224-g4dd6878

@hanwen
Copy link
Owner

hanwen commented Jul 26, 2019

In one of your traces, there is a call to sync.Pool.Get(), which triggers a GC. This call happens inside the critical section for obtaining a request to read out. This means that no further requests can be read. I don't understand why the GC is not making progress, but it seems like a no-brainer to not get new Pool elements under lock

gerritforge-ltd pushed a commit that referenced this issue Jul 26, 2019
Pool.Get() can trigger a GC, and we see this GC being hung in stack
traces for the TestDeleteNotify test case.

See issue #261.

Change-Id: I278a05fc3c6a59c701686aebd410511c5502d9d5
@hanwen
Copy link
Owner

hanwen commented Jul 26, 2019

https://review.gerrithub.io/c/hanwen/go-fuse/+/463283

33b2c2f

@navytux - can you check if this helps (i haven't been able to repro the hang.)

@navytux
Copy link
Contributor Author

navytux commented Jul 28, 2019

@hanwen, thanks, I've tried and even though it took longer time, the tests got stuck again (though for that stuck I could not extract the traceback - in that particular case after kill -QUIT and echo 1 > /sys/fs/fuse/connection/X/abort the test loop unstuck but nothing was printed even though tests were run with GOTRACEBACK=crash.

Btw, about 33b2c2f - I suggest to move req and dest allocation to after initial if ms.reqReaders > _MAX_READERS check - to after ms.reqMu.Unlock() - this way we don't unneccesarily drain the pools in readRequest that is spawned just to find out that it has to exit.

P.S. I also reran the test on v1.0.0-224-g4dd6878 (i.e. without your recent patch to move pool get out of lock) and got it stuck, but there was no pool.Get / GC in the traceback, for example:

14:00:20.608598 unknown node 576411
panic: unknown node 576411

goroutine 25 [running]:
panic(0x562dc0, 0xc00004a130)
        /home/kirr/src/tools/go/go/src/runtime/panic.go:565 +0x2c5 fp=0xc00038bd90 sp=0xc00038bd00 pc=0x42d6c5
log.Panicf(0x5ab8af, 0xf, 0xc000049e28, 0x1, 0x1)
        /home/kirr/src/tools/go/go/src/log/log.go:340 +0xc0 fp=0xc00038bde8 sp=0xc00038bd90 pc=0x50f7f0
github.com/hanwen/go-fuse/fs.(*rawBridge).inode(0xc0002c6300, 0x8cb9b, 0x0, 0x0, 0x0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fs/bridge.go:227 +0x15e fp=0xc00038be48 sp=0xc00038bde8 pc=0x52c11e
github.com/hanwen/go-fuse/fs.(*rawBridge).Lookup(0xc0002c6300, 0xc00001e240, 0xc0001003d8, 0xc000014180, 0x7, 0xc000100348, 0xc0002d01d8)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fs/bridge.go:233 +0x46 fp=0xc00038beb0 sp=0xc00038be48 pc=0x52c196
github.com/hanwen/go-fuse/fuse.doLookup(0xc0002d0140, 0xc000100240)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/opcode.go:330 +0x91 fp=0xc00038bef8 sp=0xc00038beb0 pc=0x519331
github.com/hanwen/go-fuse/fuse.(*Server).handleRequest(0xc0002d0140, 0xc000100240, 0xc000000000)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:469 +0x345 fp=0xc00038bf88 sp=0xc00038bef8 pc=0x5251a5
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0002d0140, 0xc000096b01)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:436 +0x17d fp=0xc00038bfd0 sp=0xc00038bf88 pc=0x524e3d
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1337 +0x1 fp=0xc00038bfd8 sp=0xc00038bfd0 pc=0x45bce1
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:303 +0x39e

goroutine 1 [chan receive]:
runtime.gopark(0x5b4568, 0xc00012e598, 0x170d, 0x3)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:301 +0xef fp=0xc0000adbb8 sp=0xc0000adb98 pc=0x42f7df
runtime.goparkunlock(...)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:307
runtime.chanrecv(0xc00012e540, 0xc0000adccf, 0xc000000101, 0x4d09ca)
        /home/kirr/src/tools/go/go/src/runtime/chan.go:524 +0x2ea fp=0xc0000adc48 sp=0xc0000adbb8 pc=0x40775a
runtime.chanrecv1(0xc00012e540, 0xc0000adccf)
        /home/kirr/src/tools/go/go/src/runtime/chan.go:406 +0x2b fp=0xc0000adc78 sp=0xc0000adc48 pc=0x40745b
testing.(*T).Run(0xc0002c6200, 0x5aa48a, 0xa, 0x5b40c8, 0x474901)
        /home/kirr/src/tools/go/go/src/testing/testing.go:917 +0x381 fp=0xc0000add28 sp=0xc0000adc78 pc=0x4d09f1
testing.runTests.func1(0xc0000da000)
        /home/kirr/src/tools/go/go/src/testing/testing.go:1157 +0x78 fp=0xc0000add78 sp=0xc0000add28 pc=0x4d47c8
testing.tRunner(0xc0000da000, 0xc0000ade30)
        /home/kirr/src/tools/go/go/src/testing/testing.go:865 +0xc0 fp=0xc0000adda0 sp=0xc0000add78 pc=0x4d0610
testing.runTests(0xc000096120, 0x6eb940, 0xa, 0xa, 0x0)
        /home/kirr/src/tools/go/go/src/testing/testing.go:1155 +0x2a9 fp=0xc0000ade60 sp=0xc0000adda0 pc=0x4d1e59
testing.(*M).Run(0xc0000d8000, 0x0)
        /home/kirr/src/tools/go/go/src/testing/testing.go:1072 +0x162 fp=0xc0000adf30 sp=0xc0000ade60 pc=0x4d0dd2
main.main()
        _testmain.go:60 +0x13e fp=0xc0000adf98 sp=0xc0000adf30 pc=0x5438ae
runtime.main()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:200 +0x20c fp=0xc0000adfe0 sp=0xc0000adf98 pc=0x42f3ec
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1337 +0x1 fp=0xc0000adfe8 sp=0xc0000adfe0 pc=0x45bce1

goroutine 2 [force gc (idle)]:
runtime.gopark(0x5b4568, 0x6eed90, 0x1410, 0x1)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:301 +0xef fp=0xc000034fb0 sp=0xc000034f90 pc=0x42f7df
runtime.goparkunlock(...)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:307
runtime.forcegchelper()
        /home/kirr/src/tools/go/go/src/runtime/proc.go:250 +0xb7 fp=0xc000034fe0 sp=0xc000034fb0 pc=0x42f687
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1337 +0x1 fp=0xc000034fe8 sp=0xc000034fe0 pc=0x45bce1
created by runtime.init.5
        /home/kirr/src/tools/go/go/src/runtime/proc.go:239 +0x35

goroutine 3 [GC sweep wait]:
runtime.gopark(0x5b4568, 0x6eef20, 0x140c, 0x1)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:301 +0xef fp=0xc0000357a8 sp=0xc000035788 pc=0x42f7df
runtime.goparkunlock(...)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:307
runtime.bgsweep(0xc00005e000)
        /home/kirr/src/tools/go/go/src/runtime/mgcsweep.go:70 +0x9c fp=0xc0000357d8 sp=0xc0000357a8 pc=0x4221fc
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1337 +0x1 fp=0xc0000357e0 sp=0xc0000357d8 pc=0x45bce1
created by runtime.gcenable
        /home/kirr/src/tools/go/go/src/runtime/mgc.go:208 +0x58

goroutine 18 [finalizer wait]:
runtime.gopark(0x5b4568, 0x70a4c0, 0xc00003140f, 0x1)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:301 +0xef fp=0xc000034758 sp=0xc000034738 pc=0x42f7df
runtime.goparkunlock(...)
        /home/kirr/src/tools/go/go/src/runtime/proc.go:307
runtime.runfinq()
        /home/kirr/src/tools/go/go/src/runtime/mfinal.go:175 +0xa6 fp=0xc0000347e0 sp=0xc000034758 pc=0x418ec6
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1337 +0x1 fp=0xc0000347e8 sp=0xc0000347e0 pc=0x45bce1
created by runtime.createfing
        /home/kirr/src/tools/go/go/src/runtime/mfinal.go:156 +0x61

goroutine 39 [syscall]:
syscall.Syscall6(0x101, 0xffffffffffffff9c, 0xc000207200, 0x80000, 0x0, 0x0, 0x0, 0x562f80, 0x1, 0xc0002071d0)
        /home/kirr/src/tools/go/go/src/syscall/asm_linux_amd64.s:44 +0x5 fp=0xc000042d18 sp=0xc000042d10 pc=0x46db75
syscall.openat(0xffffffffffffff9c, 0xc0002071d0, 0x28, 0x80000, 0x0, 0xb, 0x0, 0x28)
        /home/kirr/src/tools/go/go/src/syscall/zsyscall_linux_amd64.go:68 +0xc0 fp=0xc000042d98 sp=0xc000042d18 pc=0x46ad20
syscall.Open(...)
        /home/kirr/src/tools/go/go/src/syscall/syscall_linux.go:138
os.openFileNolog(0xc0002071d0, 0x28, 0x0, 0x0, 0x0, 0x28, 0xc0002071d0)
        /home/kirr/src/tools/go/go/src/os/file_unix.go:201 +0x91 fp=0xc000042df8 sp=0xc000042d98 pc=0x47e011
os.OpenFile(0xc0002071d0, 0x28, 0x0, 0x0, 0xc0002071d0, 0x28, 0x1)
        /home/kirr/src/tools/go/go/src/os/file.go:284 +0x5f fp=0xc000042e40 sp=0xc000042df8 pc=0x47d3af
os.Open(...)
        /home/kirr/src/tools/go/go/src/os/file.go:265
io/ioutil.ReadFile(0xc0002071d0, 0x28, 0x0, 0x0, 0x0, 0x0, 0x0)
        /home/kirr/src/tools/go/go/src/io/ioutil/ioutil.go:53 +0x64 fp=0xc000042e98 sp=0xc000042e40 pc=0x4ff594
github.com/hanwen/go-fuse/newunionfs.TestCreate(0xc0002c6200)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/newunionfs/unionfs_test.go:158 +0x337 fp=0xc000042fa8 sp=0xc000042e98 pc=0x540bb7
testing.tRunner(0xc0002c6200, 0x5b40c8)
        /home/kirr/src/tools/go/go/src/testing/testing.go:865 +0xc0 fp=0xc000042fd0 sp=0xc000042fa8 pc=0x4d0610
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1337 +0x1 fp=0xc000042fd8 sp=0xc000042fd0 pc=0x45bce1
created by testing.(*T).Run
        /home/kirr/src/tools/go/go/src/testing/testing.go:916 +0x35a

goroutine 54 [syscall]:
syscall.Syscall(0x0, 0x7, 0xc000362000, 0x11000, 0x5270c0, 0xc0002d0140, 0xc000047ea0)
        /home/kirr/src/tools/go/go/src/syscall/asm_linux_amd64.s:18 +0x5 fp=0xc000047df8 sp=0xc000047df0 pc=0x46daf5
syscall.read(0x7, 0xc000362000, 0x11000, 0x11000, 0x46493b, 0xc0002d01c0, 0xc0002d6680)
        /home/kirr/src/tools/go/go/src/syscall/zsyscall_linux_amd64.go:732 +0x5a fp=0xc000047e50 sp=0xc000047df8 pc=0x46c3fa
syscall.Read(...)
        /home/kirr/src/tools/go/go/src/syscall/syscall_unix.go:172
github.com/hanwen/go-fuse/fuse.(*Server).readRequest.func1(0xc0002d6680, 0xc000047ee8)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:271 +0x56 fp=0xc000047ea0 sp=0xc000047e50 pc=0x527086
github.com/hanwen/go-fuse/fuse.handleEINTR(0xc000047f58, 0x560c20, 0xc000096c80)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:247 +0x27 fp=0xc000047ec0 sp=0xc000047ea0 pc=0x523e47
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0002d0140, 0xc0000ecd01, 0xc0000ecd80, 0xc000000000)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:269 +0x18f fp=0xc000047f88 sp=0xc000047ec0 pc=0x52401f
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0002d0140, 0xc00015e401)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:414 +0x6b fp=0xc000047fd0 sp=0xc000047f88 pc=0x524d2b
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1337 +0x1 fp=0xc000047fd8 sp=0xc000047fd0 pc=0x45bce1
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:303 +0x39e

goroutine 40 [syscall]:
syscall.Syscall(0x0, 0x7, 0xc000350000, 0x11000, 0x5270c0, 0xc0002d0140, 0xc0000a9e08)
        /home/kirr/src/tools/go/go/src/syscall/asm_linux_amd64.s:18 +0x5 fp=0xc0000a9d60 sp=0xc0000a9d58 pc=0x46daf5
syscall.read(0x7, 0xc000350000, 0x11000, 0x11000, 0x46493b, 0xc0002d01c0, 0xc0002d6700)
        /home/kirr/src/tools/go/go/src/syscall/zsyscall_linux_amd64.go:732 +0x5a fp=0xc0000a9db8 sp=0xc0000a9d60 pc=0x46c3fa
syscall.Read(...)
        /home/kirr/src/tools/go/go/src/syscall/syscall_unix.go:172
github.com/hanwen/go-fuse/fuse.(*Server).readRequest.func1(0xc0002d6700, 0xc0000a9e50)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:271 +0x56 fp=0xc0000a9e08 sp=0xc0000a9db8 pc=0x527086
github.com/hanwen/go-fuse/fuse.handleEINTR(0xc0000a9ec0, 0x560c20, 0xc00015e820)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:247 +0x27 fp=0xc0000a9e28 sp=0xc0000a9e08 pc=0x523e47
github.com/hanwen/go-fuse/fuse.(*Server).readRequest(0xc0002d0140, 0xc00014ab00, 0xc00014ab40, 0xc000000000)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:269 +0x18f fp=0xc0000a9ef0 sp=0xc0000a9e28 pc=0x52401f
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0002d0140, 0x0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:414 +0x6b fp=0xc0000a9f38 sp=0xc0000a9ef0 pc=0x524d2b
github.com/hanwen/go-fuse/fuse.(*Server).Serve(0xc0002d0140)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:359 +0x6d fp=0xc0000a9fd8 sp=0xc0000a9f38 pc=0x524a7d
runtime.goexit()
        /home/kirr/src/tools/go/go/src/runtime/asm_amd64.s:1337 +0x1 fp=0xc0000a9fe0 sp=0xc0000a9fd8 pc=0x45bce1
created by github.com/hanwen/go-fuse/fs.Mount
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fs/mount.go:32 +0xe4
FAIL    github.com/hanwen/go-fuse/newunionfs    115.644s

Which led me to think that the stuck is related to timing race, not particularly and after trying several things I think I've found a way to reliably trigger the stuck.

On master (v1.0.0-227-g2f29805) it is either:

.../fuse/test$ GOMAXPROCS=1 go test -v -run TestCacheControl

(I think TestCacheControl is not unique but at this test it reliably gets stuck)

or leave GOMAXPROCS unmodified (o.r. e.g. set it to 4 which is the default on my computer) but apply the following patch which raises probability of GC triggered from under reqMu:

--- a/fuse/server.go
+++ b/fuse/server.go
@@ -263,6 +263,8 @@ func (ms *Server) readRequest(exitIdle bool) (req *request, code Status) {
                ms.reqMu.Unlock()
                return nil, OK
        }
+       //time.Sleep(1*time.Millisecond)
+       runtime.GC()
        ms.reqReaders++
        ms.reqMu.Unlock()

and then e.g. .../fuse/test$ GOMAXPROCS=4 go test -v -run TestCacheControl stucks reliably.

For now I have not looked further as I need to finish other urgent stuff.

Hope this helps a bit,
Kirill

P.S. as some bugs are only likely to trigger only when run on uniprocessor system, I suggest to add GOMAXPROCS=1 variant to .travis .

@hanwen
Copy link
Owner

hanwen commented Nov 26, 2019

this is still going on as of today

commit da0665e

the problem is in the fuse/test/ package

@navytux
Copy link
Contributor Author

navytux commented Mar 23, 2020

As of 2020-03-23 (v2.0.2-55-gfe141f3) running tests still gets stuck sometimes.

@navytux
Copy link
Contributor Author

navytux commented Oct 7, 2020

This is still the case as of today master (v2.0.3-7-g0b6cbc5). GOMAXPROCS=1 go test -count=1 ./... stucks reliably. I filed https://review.gerrithub.io/c/hanwen/go-fuse/+/503695 to add GOMAXPROCS=1 to test matrix.

@rfjakob
Copy link
Contributor

rfjakob commented Oct 7, 2020

Can repro. backtrace.txt

@rfjakob
Copy link
Contributor

rfjakob commented Oct 7, 2020

Looking at the kernel stacks, we see that one thread is blocked on a page fault:

$ for i in $(pgrep -w test.test) ; do echo $i ; sudo cat /proc/$i/stack ; done
[...]
1515340
[<0>] wait_on_page_bit_common+0x114/0x330
[<0>] filemap_fault+0x401/0x940
[<0>] __do_fault+0x36/0x100
[<0>] handle_mm_fault+0x1075/0x1950
[<0>] do_user_addr_fault+0x1c4/0x470
[<0>] exc_page_fault+0x81/0x1a0
[<0>] asm_exc_page_fault+0x1e/0x30
[...]

This page fault is caused by this mmap read (verified by printf debugging):

assertMmapRead("after invalcache", data0)

I think this cannot work with GOMAXPROCS=1. The active thread is blocked in a page fault from the mmap. A blocking syscall would have created another thread, but not a blocking memory read!

Handling that page fault requires handling a FUSE transaction, for which we have no free thread => deadlock.

Maybe this can be fixed using lockOsThread()

@rfjakob
Copy link
Contributor

rfjakob commented Oct 7, 2020

Fixed using Mlock() in https://review.gerrithub.io/c/hanwen/go-fuse/+/503708 .

@navytux
Copy link
Contributor Author

navytux commented Oct 7, 2020

@rfjakob, thanks. Please see my feedback regarding your patch on gerrit.

However after fixing TestCacheControl it still hangs in TestDeleteNotify (like it was explained above several times).

(neo) (z-dev) (g.env) kirr@deco:~/src/neo/src/github.com/hanwen/go-fuse$ GOTRACEBACK=crash GOMAXPROCS=1 go1.14 test -v -count=1 -run TestDeleteNotify ./fuse/test
=== RUN   TestDeleteNotify
18:16:01.232359 rx 2: INIT i0 {7.31 Ra 0x20000 FLOCK_LOCKS,WRITEBACK_CACHE,NO_OPEN_SUPPORT,POSIX_LOCKS,SPLICE_WRITE,AUTO_INVAL_DATA,NO_OPENDIR_SUPPORT,DONT_MASK,SPLICE_MOVE,SPLICE_READ,ASYNC_READ,ATOMIC_O_TRUNC,EXPORT_SUPPORT,BIG_WRITES,IOCTL_DIR,POSIX_ACL,HANDLE_KILLPRIV,CACHE_SYMLINKS,EXPLICIT_INVAL_DATA,MAX_PAGES,READDIRPLUS,READDIRPLUS_AUTO,ASYNC_DIO,PARALLEL_DIROPS,ABORT_ERROR} 
18:16:01.232447 tx 2:     OK, {7.28 Ra 0x20000 AUTO_INVAL_DATA,BIG_WRITES,ASYNC_READ,PARALLEL_DIROPS,READDIRPLUS,NO_OPEN_SUPPORT 0/0 Wr 0x10000 Tg 0x0}
18:16:01.232702 rx 4: LOOKUP i1 [".go-fuse-epoll-hack"] 20b
18:16:01.232724 tx 4:     OK, {i18446744073709551615 g0 tE=0s tA=0s {M0100644 SZ=0 L=1 0:0 B0*0 i0:18446744073709551615 A 0.000000 M 0.000000 C 0.000000}}
18:16:01.232748 rx 6: OPEN i18446744073709551615 {O_RDONLY,0x8000} 
18:16:01.232753 tx 6:     OK, {Fh 18446744073709551615 }
18:16:01.232775 rx 8: POLL i18446744073709551615 
18:16:01.232780 tx 8:     38=function not implemented
18:16:01.232795 rx 10: FLUSH i18446744073709551615 {Fh 18446744073709551615} 
18:16:01.232799 tx 10:     34=numerical result out of range
18:16:01.232848 rx 12: RELEASE i18446744073709551615 {Fh 18446744073709551615 0x8000  L0} 
18:16:01.232853 tx 12:     34=numerical result out of range
18:16:01.232863 rx 14: LOOKUP i1 ["testdir"] 8b
18:16:01.232874 tx 14:     OK, {i3 g2 tE=0s tA=0s {M040755 SZ=0 L=0 0:0 B0*0 i0:3 A 1602083761.232808 M 1602083761.232808 C 1602083761.232808}}
18:16:01.232893 rx 16: LOOKUP i3 ["testfile"] 9b
18:16:01.232902 tx 16:     2=no such file or directory, {i0 g0 tE=0s tA=0s {M00 SZ=0 L=0 0:0 B0*0 i0:0 A 0.000000 M 0.000000 C 0.000000}}
18:16:01.232928 rx 18: CREATE i3 {0100644 [WRONLY,TRUNC,CREAT,0x8000] (022)} ["testfile"] 9b
18:16:01.232965 tx 18:     OK, {i4 g3 {M0100644 SZ=0 L=1 0:0 B0*0 i0:4 A 1602083761.232932 M 1602083761.232932 C 1602083761.232932} &{2 0 0}}
18:16:01.233005 rx 20: GETXATTR i4 {sz 0} ["security.capability"] 20b
18:16:01.233010 tx 20:     61=no data available
18:16:01.233033 rx 22: WRITE i4 {Fh 2 [0 +1)  L 0 WRONLY,NONBLOCK,0x8000} "*" 1b
18:16:01.233044 tx 22:     OK
18:16:01.233060 rx 24: FLUSH i4 {Fh 2} 
18:16:01.233076 tx 24:     OK
18:16:01.233148 rx 26: RELEASE i4 {Fh 2 WRONLY,NONBLOCK,0x8000  L0} 
18:16:01.233154 tx 26:     OK
18:16:01.233164 rx 28: LOOKUP i1 ["testdir"] 8b
18:16:01.233174 tx 28:     OK, {i3 g2 tE=0s tA=0s {M040755 SZ=0 L=0 0:0 B0*0 i0:3 A 1602083761.232808 M 1602083761.232808 C 1602083761.232808}}
18:16:01.233189 rx 30: GETATTR i3 {Fh 0} 
18:16:01.233198 tx 30:     OK, {tA=0s {M040755 SZ=0 L=1 0:0 B0*0 i0:3 A 1602083761.232808 M 1602083761.232808 C 1602083761.232808}}

# hang

^\SIGQUIT: quit
PC=0x4686ed m=2 sigcode=128

goroutine 0 [idle]:
runtime.usleep(0x1b9200002710, 0x0, 0x44be01, 0x271000000002, 0x1b76cf56e49a, 0x1b920b834b3f, 0x1b920b834b3f, 0x1c0282046c69, 0x7fc486b9ce30, 0x0, ...)
        /home/kirr/src/tools/go/go1.14/src/runtime/sys_linux_amd64.s:146 +0x3d fp=0x7fc486b9cde0 sp=0x7fc486b9cdc0 pc=0x4686ed
runtime.sysmon()
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:4512 +0x8d fp=0x7fc486b9ce58 sp=0x7fc486b9cde0 pc=0x44220d
runtime.mstart1()
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:1112 +0xc3 fp=0x7fc486b9ce80 sp=0x7fc486b9ce58 pc=0x439ef3
runtime.mstart()
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:1077 +0x6e fp=0x7fc486b9cea8 sp=0x7fc486b9ce80 pc=0x439e0e

goroutine 1 [chan receive]:
runtime.gopark(0x628860, 0xc000020358, 0x4d170e, 0x2)
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:304 +0xe0 fp=0xc000045b88 sp=0xc000045b68 pc=0x437970
runtime.chanrecv(0xc000020300, 0xc000045c87, 0xc000000101, 0x4e23f2)
        /home/kirr/src/tools/go/go1.14/src/runtime/chan.go:525 +0x2e7 fp=0xc000045c18 sp=0xc000045b88 pc=0x407817
runtime.chanrecv1(0xc000020300, 0xc000045c87)
        /home/kirr/src/tools/go/go1.14/src/runtime/chan.go:407 +0x2b fp=0xc000045c48 sp=0xc000045c18 pc=0x40751b
testing.(*T).Run(0xc0000a8120, 0x61deac, 0x10, 0x628348, 0x483b01)
        /home/kirr/src/tools/go/go1.14/src/testing/testing.go:1106 +0x399 fp=0xc000045ce0 sp=0xc000045c48 pc=0x4e2419
testing.runTests.func1(0xc0000a8000)
        /home/kirr/src/tools/go/go1.14/src/testing/testing.go:1349 +0x78 fp=0xc000045d30 sp=0xc000045ce0 pc=0x4e6408
testing.tRunner(0xc0000a8000, 0xc000045e10)
        /home/kirr/src/tools/go/go1.14/src/testing/testing.go:1054 +0xdc fp=0xc000045d80 sp=0xc000045d30 pc=0x4e200c
testing.runTests(0xc00000e140, 0x7c4e00, 0x3c, 0x3c, 0x0)
        /home/kirr/src/tools/go/go1.14/src/testing/testing.go:1347 +0x2a7 fp=0xc000045e40 sp=0xc000045d80 pc=0x4e3a17
testing.(*M).Run(0xc000086100, 0x0)
        /home/kirr/src/tools/go/go1.14/src/testing/testing.go:1264 +0x1b7 fp=0xc000045f20 sp=0xc000045e40 pc=0x4e28c7
main.main()
        _testmain.go:162 +0x135 fp=0xc000045f88 sp=0xc000045f20 pc=0x5b0c45
runtime.main()
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:203 +0x1fa fp=0xc000045fe0 sp=0xc000045f88 pc=0x4375aa
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc000045fe8 sp=0xc000045fe0 pc=0x466b81

goroutine 2 [force gc (idle)]:
runtime.gopark(0x628a28, 0x7c8100, 0x1411, 0x1)
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:304 +0xe0 fp=0xc000032fb0 sp=0xc000032f90 pc=0x437970
runtime.goparkunlock(...)
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:310
runtime.forcegchelper()
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:253 +0xb7 fp=0xc000032fe0 sp=0xc000032fb0 pc=0x437827
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc000032fe8 sp=0xc000032fe0 pc=0x466b81
created by runtime.init.6
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:242 +0x35

goroutine 3 [GC sweep wait]:
runtime.gopark(0x628a28, 0x7c82a0, 0x140c, 0x1)
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:304 +0xe0 fp=0xc0000337a8 sp=0xc000033788 pc=0x437970
runtime.goparkunlock(...)
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:310
runtime.bgsweep(0xc000052000)
        /home/kirr/src/tools/go/go1.14/src/runtime/mgcsweep.go:70 +0x9c fp=0xc0000337d8 sp=0xc0000337a8 pc=0x4238fc
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc0000337e0 sp=0xc0000337d8 pc=0x466b81
created by runtime.gcenable
        /home/kirr/src/tools/go/go1.14/src/runtime/mgc.go:214 +0x5c
goroutine 4 [GC scavenge wait]:
runtime.gopark(0x628a28, 0x7c8260, 0x140d, 0x1)
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:304 +0xe0 fp=0xc000033f78 sp=0xc000033f58 pc=0x437970
runtime.goparkunlock(...)
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:310
runtime.bgscavenge(0xc000052000)
        /home/kirr/src/tools/go/go1.14/src/runtime/mgcscavenge.go:237 +0xd0 fp=0xc000033fd8 sp=0xc000033f78 pc=0x421e60
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc000033fe0 sp=0xc000033fd8 pc=0x466b81
created by runtime.gcenable
        /home/kirr/src/tools/go/go1.14/src/runtime/mgc.go:215 +0x7e

goroutine 5 [finalizer wait]:
runtime.gopark(0x628a28, 0x7f1ab8, 0x1410, 0x1)
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:304 +0xe0 fp=0xc000034758 sp=0xc000034738 pc=0x437970
runtime.goparkunlock(...)
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:310
runtime.runfinq()
        /home/kirr/src/tools/go/go1.14/src/runtime/mfinal.go:175 +0xa3 fp=0xc0000347e0 sp=0xc000034758 pc=0x4194c3
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc0000347e8 sp=0xc0000347e0 pc=0x466b81
created by runtime.createfing
        /home/kirr/src/tools/go/go1.14/src/runtime/mfinal.go:156 +0x61

goroutine 6 [running]:
        goroutine running on other thread; stack unavailable
created by testing.(*T).Run
        /home/kirr/src/tools/go/go1.14/src/testing/testing.go:1105 +0x372

goroutine 7 [runnable]:
syscall.Syscall(0x1, 0x9, 0xc0000c20f8, 0x78, 0x78, 0x78, 0x0)
        /home/kirr/src/tools/go/go1.14/src/syscall/asm_linux_amd64.s:18 +0x5 fp=0xc0000e5c48 sp=0xc0000e5c40 pc=0x47cb75
syscall.write(0x9, 0xc0000c20f8, 0x78, 0xa0, 0xc0000e5d80, 0x523488, 0xc0000120f0)
        /home/kirr/src/tools/go/go1.14/src/syscall/zsyscall_linux_amd64.go:914 +0x5a fp=0xc0000e5ca0 sp=0xc0000e5c48 pc=0x47b24a
syscall.Write(...)
        /home/kirr/src/tools/go/go1.14/src/syscall/syscall_unix.go:214
github.com/hanwen/go-fuse/fuse.(*Server).systemWrite.func1(0x1a0, 0x84)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server_linux.go:15 +0x4c fp=0xc0000e5ce8 sp=0xc0000e5ca0 pc=0x53e37c
github.com/hanwen/go-fuse/fuse.handleEINTR(0xc0000e5d58, 0x7c05a0, 0x60afe0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:255 +0x27 fp=0xc0000e5d08 sp=0xc0000e5ce8 pc=0x5397a7
github.com/hanwen/go-fuse/fuse.(*Server).systemWrite(0xc0000ba000, 0xc0000c2000, 0xc0000c20f8, 0x78, 0xa0, 0x52e1ad)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server_linux.go:14 +0x3bb fp=0xc0000e5dd0 sp=0xc0000e5d08 pc=0x53cd3b
github.com/hanwen/go-fuse/fuse.(*Server).write(0xc0000ba000, 0xc0000c2000, 0x1)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:528 +0xbf fp=0xc0000e5e38 sp=0xc0000e5dd0 pc=0x53b09f
github.com/hanwen/go-fuse/fuse.(*Server).handleRequest(0xc0000ba000, 0xc0000c2000, 0xc000000000)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:475 +0x13d fp=0xc0000e5ed8 sp=0xc0000e5e38 pc=0x53aa9d
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0000ba000, 0x0)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:445 +0x18a fp=0xc0000e5f38 sp=0xc0000e5ed8 pc=0x53a93a
github.com/hanwen/go-fuse/fuse.(*Server).Serve(0xc0000ba000)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:367 +0x45 fp=0xc0000e5fd8 sp=0xc0000e5f38 pc=0x53a4d5
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc0000e5fe0 sp=0xc0000e5fd8 pc=0x466b81
created by github.com/hanwen/go-fuse/fuse/test.TestDeleteNotify
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/test/delete_linux_test.go:54 +0x391

goroutine 8 [runnable]:
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0000ba000, 0xc00000e201)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:419 fp=0xc000034fd0 sp=0xc000034fc8 pc=0x53a7b0
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc000034fd8 sp=0xc000034fd0 pc=0x466b81
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:312 +0x417

goroutine 9 [runnable]:
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0000ba000, 0xc00000e201)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:419 fp=0xc0000327d0 sp=0xc0000327c8 pc=0x53a7b0
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc0000327d8 sp=0xc0000327d0 pc=0x466b81
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:312 +0x417

goroutine 10 [runnable]:
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0000ba000, 0xc00000e301)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:419 fp=0xc0000357d0 sp=0xc0000357c8 pc=0x53a7b0
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc0000357d8 sp=0xc0000357d0 pc=0x466b81
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:312 +0x417

goroutine 11 [runnable]:
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0000ba000, 0xc00000e301)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:419 fp=0xc000035fd0 sp=0xc000035fc8 pc=0x53a7b0
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc000035fd8 sp=0xc000035fd0 pc=0x466b81
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:312 +0x417

goroutine 12 [runnable]:
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0000ba000, 0xc00000e301)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:419 fp=0xc00002e7d0 sp=0xc00002e7c8 pc=0x53a7b0
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc00002e7d8 sp=0xc00002e7d0 pc=0x466b81
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:312 +0x417

goroutine 13 [runnable]:
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0000ba000, 0xc00000e301)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:419 fp=0xc00002efd0 sp=0xc00002efc8 pc=0x53a7b0
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc00002efd8 sp=0xc00002efd0 pc=0x466b81
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:312 +0x417

goroutine 14 [runnable]:
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0000ba000, 0xc00000e401)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:419 fp=0xc00002f7d0 sp=0xc00002f7c8 pc=0x53a7b0
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc00002f7d8 sp=0xc00002f7d0 pc=0x466b81
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:312 +0x417

goroutine 15 [runnable]:
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0000ba000, 0xc00000e401)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:419 fp=0xc00002ffd0 sp=0xc00002ffc8 pc=0x53a7b0
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc00002ffd8 sp=0xc00002ffd0 pc=0x466b81
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:312 +0x417

goroutine 16 [runnable]:
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0000ba000, 0xc00000e501)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:419 fp=0xc0000307d0 sp=0xc0000307c8 pc=0x53a7b0
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc0000307d8 sp=0xc0000307d0 pc=0x466b81
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:312 +0x417

goroutine 18 [runnable]:
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0000ba000, 0xc00000e501)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:419 fp=0xc000030fd0 sp=0xc000030fc8 pc=0x53a7b0
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc000030fd8 sp=0xc000030fd0 pc=0x466b81
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:312 +0x417

goroutine 19 [runnable]:
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0000ba000, 0xc00000e601)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:419 fp=0xc0000317d0 sp=0xc0000317c8 pc=0x53a7b0
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc0000317d8 sp=0xc0000317d0 pc=0x466b81
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:312 +0x417

goroutine 20 [runnable]:
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0000ba000, 0xc00000e701)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:419 fp=0xc000031fd0 sp=0xc000031fc8 pc=0x53a7b0
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc000031fd8 sp=0xc000031fd0 pc=0x466b81
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:312 +0x417

goroutine 21 [runnable]:
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0000ba000, 0xc00000e701)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:419 fp=0xc0000fa7d0 sp=0xc0000fa7c8 pc=0x53a7b0
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc0000fa7d8 sp=0xc0000fa7d0 pc=0x466b81
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:312 +0x417

goroutine 22 [runnable]:
github.com/hanwen/go-fuse/fuse.(*Server).loop(0xc0000ba000, 0xc00000e701)
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:419 fp=0xc0000fafd0 sp=0xc0000fafc8 pc=0x53a7b0
runtime.goexit()
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:1373 +0x1 fp=0xc0000fafd8 sp=0xc0000fafd0 pc=0x466b81
created by github.com/hanwen/go-fuse/fuse.(*Server).readRequest
        /home/kirr/src/neo/src/github.com/hanwen/go-fuse/fuse/server.go:312 +0x417

rax    0xfffffffffffffffc
rbx    0x4e20
rcx    0x4686ed
rdx    0x0
rdi    0x7fc486b9cdc0
rsi    0x0
rbp    0x7fc486b9cdd0
rsp    0x7fc486b9cdc0
r8     0x5
r9     0x7f1ae8
r10    0x0
r11    0x202
r12    0xf1
r13    0x0
r14    0x65610c
r15    0x0
rip    0x4686ed
rflags 0x202
cs     0x33
fs     0x0
gs     0x0

-----

SIGQUIT: quit
PC=0x468cf1 m=3 sigcode=0

goroutine 0 [idle]:
runtime.futex(0xc000036848, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fc48639bcc0, 0x40c3ff, ...)
        /home/kirr/src/tools/go/go1.14/src/runtime/sys_linux_amd64.s:567 +0x21 fp=0x7fc48639bc48 sp=0x7fc48639bc40 pc=0x468cf1
runtime.futexsleep(0xc000036848, 0x7ffc00000000, 0xffffffffffffffff)
        /home/kirr/src/tools/go/go1.14/src/runtime/os_linux.go:45 +0x46 fp=0x7fc48639bc98 sp=0x7fc48639bc48 pc=0x4313a6
runtime.notesleep(0xc000036848)
        /home/kirr/src/tools/go/go1.14/src/runtime/lock_futex.go:151 +0x9f fp=0x7fc48639bcd0 sp=0x7fc48639bc98 pc=0x40c3ff
runtime.stopm()
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:1852 +0xc0 fp=0x7fc48639bcf8 sp=0x7fc48639bcd0 pc=0x43b440
runtime.findrunnable(0xc000024000, 0x0)
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:2399 +0xa0d fp=0x7fc48639bde0 sp=0x7fc48639bcf8 pc=0x43ca8d
runtime.schedule()
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:2559 +0x2fc fp=0x7fc48639be48 sp=0x7fc48639bde0 pc=0x43d5cc
runtime.park_m(0xc000001500)
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:2729 +0x9d fp=0x7fc48639be78 sp=0x7fc48639be48 pc=0x43db4d
runtime.mcall(0x800000)
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:318 +0x5b fp=0x7fc48639be88 sp=0x7fc48639be78 pc=0x464a5b
rax    0xca
rbx    0xc000036700
rcx    0x468cf3
rdx    0x0
rdi    0xc000036848
rsi    0x80
rbp    0x7fc48639bc88
rsp    0x7fc48639bc40
r8     0x0
r9     0x0
r10    0x0
r11    0x286
r12    0x3
r13    0xc000001080
r14    0x655f88
r15    0x0
rip    0x468cf1
rflags 0x286
cs     0x33
fs     0x0
gs     0x0

-----

SIGQUIT: quit
PC=0x468cf1 m=4 sigcode=0

goroutine 0 [idle]:
runtime.futex(0x7f1cd8, 0x80, 0x0, 0x0, 0x0, 0x8000, 0x7fc485b9ae20, 0x44bc79, 0x7fc485b9ae28, 0x40c3ff, ...)
        /home/kirr/src/tools/go/go1.14/src/runtime/sys_linux_amd64.s:567 +0x21 fp=0x7fc485b9adb0 sp=0x7fc485b9ada8 pc=0x468cf1
runtime.futexsleep(0x7f1cd8, 0x0, 0xffffffffffffffff)
        /home/kirr/src/tools/go/go1.14/src/runtime/os_linux.go:45 +0x46 fp=0x7fc485b9ae00 sp=0x7fc485b9adb0 pc=0x4313a6
runtime.notesleep(0x7f1cd8)
        /home/kirr/src/tools/go/go1.14/src/runtime/lock_futex.go:151 +0x9f fp=0x7fc485b9ae38 sp=0x7fc485b9ae00 pc=0x40c3ff
runtime.templateThread()
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:1830 +0xf2 fp=0x7fc485b9ae58 sp=0x7fc485b9ae38 pc=0x43b362
runtime.mstart1()
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:1112 +0xc3 fp=0x7fc485b9ae80 sp=0x7fc485b9ae58 pc=0x439ef3
runtime.mstart()
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:1077 +0x6e fp=0x7fc485b9aea8 sp=0x7fc485b9ae80 pc=0x439e0e
rax    0xca
rbx    0xc000036a80
rcx    0x468cf3
rdx    0x0
rdi    0x7f1cd8
rsi    0x80
rbp    0x7fc485b9adf0
rsp    0x7fc485b9ada8
r8     0x0
r9     0x0
r10    0x0
r11    0x286
r12    0xc000001380
r13    0x7ffc0d873acf
r14    0x7fc485b9afc0
r15    0x802000
rip    0x468cf1
rflags 0x286
cs     0x33
fs     0x0
gs     0x0

-----

SIGQUIT: quit
PC=0x468cf1 m=5 sigcode=0

goroutine 0 [idle]:
runtime.futex(0xc000089d48, 0x80, 0x0, 0x0, 0xc000000000, 0xc0000f0f00, 0x7fc485359e30, 0x43f9d0, 0x7fc485359e10, 0x40c3ff, ...)
        /home/kirr/src/tools/go/go1.14/src/runtime/sys_linux_amd64.s:567 +0x21 fp=0x7fc485359d98 sp=0x7fc485359d90 pc=0x468cf1
runtime.futexsleep(0xc000089d48, 0x7fc400000000, 0xffffffffffffffff)
        /home/kirr/src/tools/go/go1.14/src/runtime/os_linux.go:45 +0x46 fp=0x7fc485359de8 sp=0x7fc485359d98 pc=0x4313a6
runtime.notesleep(0xc000089d48)
        /home/kirr/src/tools/go/go1.14/src/runtime/lock_futex.go:151 +0x9f fp=0x7fc485359e20 sp=0x7fc485359de8 pc=0x40c3ff
runtime.stopm()
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:1852 +0xc0 fp=0x7fc485359e48 sp=0x7fc485359e20 pc=0x43b440
runtime.exitsyscall0(0xc000001800)
        /home/kirr/src/tools/go/go1.14/src/runtime/proc.go:3301 +0x111 fp=0x7fc485359e78 sp=0x7fc485359e48 pc=0x43f2e1
runtime.mcall(0x800000)
        /home/kirr/src/tools/go/go1.14/src/runtime/asm_amd64.s:318 +0x5b fp=0x7fc485359e88 sp=0x7fc485359e78 pc=0x464a5b
rax    0xca
rbx    0xc000089c00
rcx    0x468cf3
rdx    0x0
rdi    0xc000089d48
rsi    0x80
rbp    0x7fc485359dd8
rsp    0x7fc485359d90
r8     0x0
r9     0x0
r10    0x0
r11    0x286
r12    0xffffffffffffffff
r13    0x14
r14    0x13
r15    0x40
rip    0x468cf1
rflags 0x286
cs     0x33
fs     0x0
gs     0x0

-----

FAIL    github.com/hanwen/go-fuse/fuse/test     121.994s
FAIL

@rfjakob
Copy link
Contributor

rfjakob commented Oct 7, 2020

Looks like the hang in chdir,

$ for i in $(pgrep -w test.test) ; do echo $i ; sudo cat /proc/$i/stack ; done
1941835
[<0>] request_wait_answer+0x107/0x200 [fuse]
[<0>] fuse_simple_request+0x198/0x300 [fuse]
[<0>] fuse_dentry_revalidate+0x113/0x310 [fuse]
[<0>] lookup_fast+0xa7/0x130
[<0>] walk_component+0x33/0x190
[<0>] path_lookupat+0x72/0x1c0
[<0>] filename_lookup+0x97/0x180
[<0>] ksys_chdir+0x2d/0xa0
[<0>] __x64_sys_chdir+0xe/0x20
[<0>] do_syscall_64+0x4d/0x90
[<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
1941955
[<0>] _do_fork+0x1c3/0x370
[<0>] __do_sys_clone+0x65/0x70
[<0>] do_syscall_64+0x4d/0x90
[<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
1941956
[<0>] hrtimer_nanosleep+0xbc/0x190
[<0>] __x64_sys_nanosleep+0x8e/0xb0
[<0>] do_syscall_64+0x4d/0x90
[<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
1941957
[<0>] futex_wait_queue_me+0xb6/0x110
[<0>] futex_wait+0xd8/0x1f0
[<0>] do_futex+0x168/0xcb0
[<0>] __x64_sys_futex+0x124/0x13d
[<0>] do_syscall_64+0x4d/0x90
[<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
1941958
[<0>] futex_wait_queue_me+0xb6/0x110
[<0>] futex_wait+0xd8/0x1f0
[<0>] do_futex+0x168/0xcb0
[<0>] __x64_sys_futex+0x124/0x13d
[<0>] do_syscall_64+0x4d/0x90
[<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
1941961
[<0>] futex_wait_queue_me+0xb6/0x110
[<0>] futex_wait+0xd8/0x1f0
[<0>] do_futex+0x168/0xcb0
[<0>] __x64_sys_futex+0x124/0x13d
[<0>] do_syscall_64+0x4d/0x90
[<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
1941962
[<0>] request_wait_answer+0xd4/0x200 [fuse]
[<0>] fuse_simple_request+0x198/0x300 [fuse]
[<0>] fuse_dentry_revalidate+0x113/0x310 [fuse]
[<0>] lookup_fast+0xa7/0x130
[<0>] walk_component+0x33/0x190
[<0>] path_lookupat+0x72/0x1c0
[<0>] filename_lookup+0x97/0x180
[<0>] ksys_chdir+0x2d/0xa0
[<0>] __x64_sys_chdir+0xe/0x20
[<0>] do_syscall_64+0x4d/0x90
[<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9

@rfjakob
Copy link
Contributor

rfjakob commented Oct 7, 2020

hanwen pushed a commit that referenced this issue Oct 7, 2020
GOMAXPROCS=1 currently triggers tests hang:
#261

Change-Id: I3dc98c8bbdaac7a4ce86639e405ba1a1cef4c295
hanwen pushed a commit that referenced this issue Oct 7, 2020
…RALLEL_DIROPS

If kernel internally serializes lookup requests for a directory, the
test will deadlock, becaue it tries to issue two such request and pause
lookup handlers, untill both requests come in.

For example here is how this test hangs on Ubuntu Xenial 16.04:

kirr@kubu:~/t/go-fuse$ go test -count=1 -v -run TestNodeParallelLookup ./fuse/test/
=== RUN   TestNodeParallelLookup
18:24:38.494651 rx 1: INIT i0 {7.23 Ra 0x20000 POSIX_LOCKS,ATOMIC_O_TRUNC,EXPORT_SUPPORT,DONT_MASK,FLOCK_LOCKS,READDIRPLUS_AUTO,ASYNC_DIO,WRITEBACK_CACHE,SPLICE_WRITE,SPLICE_READ,IOCTL_DIR,AUTO_INVAL_DATA,READDIRPLUS,NO_OPEN_SUPPORT,ASYNC_READ,BIG_WRITES,SPLICE_MOVE}
18:24:38.494713 tx 1:     OK, {7.23 Ra 0x20000 ASYNC_READ,BIG_WRITES,AUTO_INVAL_DATA,READDIRPLUS,NO_OPEN_SUPPORT 0/0 Wr 0x10000 Tg 0x0}
18:24:38.495351 rx 2: LOOKUP i1 [".go-fuse-epoll-hack"] 20b
18:24:38.495467 tx 2:     OK, {i18446744073709551615 g0 tE=0s tA=0s {M0100644 SZ=0 L=1 0:0 B0*0 i0:18446744073709551615 A 0.000000 M 0.000000 C 0.000000}}
18:24:38.495530 rx 3: OPEN i18446744073709551615 {O_RDONLY,0x8000}
18:24:38.495575 tx 3:     OK, {Fh 18446744073709551615 }
18:24:38.495624 rx 4: POLL i18446744073709551615
18:24:38.495659 tx 4:     38=function not implemented
18:24:38.495706 rx 5: FLUSH i18446744073709551615 {Fh 18446744073709551615}
18:24:38.495741 tx 5:     34=numerical result out of range
18:24:38.495812 rx 6: RELEASE i18446744073709551615 {Fh 18446744073709551615 0x8000  L0}
18:24:38.495849 tx 6:     34=numerical result out of range
18:24:38.495904 rx 7: LOOKUP i1 ["world"] 6b
18:24:38.495957 I: <- lookup "world"
< hang >

Amends: 17c0c40 (nodefs: Allow for several Lookup requests to be served simultaneously)
Updates: #261

Change-Id: I5d0a76d1190af805351326c378f69cf8ff781a37
@hanwen hanwen closed this as completed in 8e0bbdb Jan 25, 2021
hanwen pushed a commit that referenced this issue Jul 30, 2021
This

	GOMAXPROCS=1 go test -v -count=1 -run TestDeleteNotify ./fuse/test

deadlocked reliably, apparently in the chdir() from cmd.Start().

We can do without the chdir() by using an absolte path.
This avoids the issue.

Fixes #261

Change-Id: Ia9c8f15819c125c5bf94b085fa4c5f2977a6789a
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants