1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
id = 2179
title = "qemu-storage-daemon: fuse export deadlock"
state = "opened"
created_at = "2024-02-19T23:58:34.115Z"
closed_at = "n/a"
labels = ["Storage", "kind::Bug"]
url = "https://gitlab.com/qemu-project/qemu/-/issues/2179"
host-os = "Arch Linux"
host-arch = "x86_64"
qemu-version = "8.2.1"
guest-os = "n/a"
guest-arch = "n/a"
description = "n/a"
reproduce = """1. Start QSD
2. Issue a `block-stream` and a read from the fuse export at the same time
```
Term 1:
(QEMU) block-stream device=root job-id=job1
{"return": {}}
(QEMU)
{'timestamp': {'seconds': 1708386076, 'microseconds': 965781}, 'event': 'JOB_STATUS_CHANGE', 'data': {'status': 'created', 'id': 'job1'}}
{'timestamp': {'seconds': 1708386076, 'microseconds': 965838}, 'event': 'JOB_STATUS_CHANGE', 'data': {'status': 'running', 'id': 'job1'}}
(QEMU)
(QEMU)
(QEMU)
(QEMU) query-block-jobs
<HANGS>
Term 2:
dd if=/tmp/fuse_exp of=/dev/null bs=1M skip=2000
<HANGS>
```
```
$ pidof qemu-storage-daemon
92313
$ sudo cat /proc/92313/task/92313/stack
[<0>] do_sys_poll+0x4e1/0x5d0
[<0>] __x64_sys_ppoll+0xe2/0x170
[<0>] do_syscall_64+0x64/0xe0
[<0>] entry_SYSCALL_64_after_hwframe+0x6e/0x76
$ sudo cat /proc/92313/task/92314/stack
[<0>] futex_wait_queue+0x63/0x90
[<0>] __futex_wait+0x14f/0x1c0
[<0>] futex_wait+0x77/0x110
[<0>] do_futex+0xcb/0x190
[<0>] __x64_sys_futex+0x129/0x1e0
[<0>] do_syscall_64+0x64/0xe0
[<0>] entry_SYSCALL_64_after_hwframe+0x6e/0x76
```"""
additional = """This might also be a general between `block-stream` and `copy-on-read` but I could only trigger the problem with FUSE and not NBD. E.g this command does not deadlock:
```
--export type=nbd,id=nbd-root,node-name=root_crw,name=root_crw,writable=off
nbdfuse /tmp/tmp.69dRvNXj1O/disk nbd://localhost:10809/root_crw
dd if=/tmp/tmp.69dRvNXj1O/disk of=/dev/null bs=1M skip=2000
```"""
|