Commit d74c2b0
committed
fuse: fix io_uring connection abort leaving requests stuck
Fix uninterruptible sleep (D state) hangs during FUSE filesystem
teardown when using io_uring. The issue manifests as processes stuck
waiting for requests that are never completed, particularly affecting
force requests like FUSE_FLUSH or when requests are created after
fuse_abort_conn() already finished.
If on daemon exit
io_uring_try_cancel_requests() runs and calls fuse_uring_cancel()
which will teardown the entries by calling fuse_uring_entry_teardown()
before fuse_abort_conn() then we end up in fuse_uring_abort with
queue_refs == 0 and the queues are never stopped.
If the queues are stopped all new requests will be rejected, but
that does not happen, so all new calls are stuck.
Signed-off-by: Horst Birthelmer <hbirthelmer@ddn.com>
(cherry picked from commit 9550b4d)1 parent 2e18ba5 commit d74c2b0
2 files changed
Lines changed: 3 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
158 | 158 | | |
159 | 159 | | |
160 | 160 | | |
161 | | - | |
162 | | - | |
163 | 161 | | |
164 | 162 | | |
165 | 163 | | |
| 164 | + | |
166 | 165 | | |
167 | 166 | | |
168 | 167 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
181 | 181 | | |
182 | 182 | | |
183 | 183 | | |
184 | | - | |
185 | | - | |
186 | | - | |
187 | | - | |
| 184 | + | |
| 185 | + | |
188 | 186 | | |
189 | 187 | | |
190 | 188 | | |
| |||
0 commit comments