On 2025-08-04 7:33 a.m., Bernd Schubert wrote:
Hi Brian,

sorry for my late reply, just back from vacation and fighting through
my mails.

On 8/4/25 01:33, Brian Song wrote:


On 2025-08-01 12:09 p.m., Brian Song wrote:
Hi Bernd,

We are currently working on implementing termination support for fuse-
over-io_uring in QEMU, and right now we are focusing on how to clean up
in-flight SQEs properly. Our main question is about how well the kernel
supports robust cancellation for these fuse-over-io_uring SQEs. Does it
actually implement cancellation beyond destroying the io_uring queue?
[...]


I have to admit that I'm confused why you can't use umount, isn't that
the most graceful way to shutdown a connection?

If you need another custom way for some reasons, we probably need
to add it.


Thanks,
Bernd

Hi Bernd,

Thanks for your insights!

I think umount doesn't cancel any pending SQEs, right? From what I see, the only way to cancel all pending SQEs and transition all entries to the FRRS_USERSPACE state (unavailable for further fuse requests) in the kernel is by calling io_uring_files_cancel in do_exit, or io_uring_task_cancel in begin_new_exec.

From my understanding, QEMU follows an event-driven model. So if we don't cancel the SQEs submitted by a connection when it ends, then before QEMU exits — after the connection is closed and the associated FUSE data structures have been freed — any CQE that comes back will trigger QEMU to invoke a previously deleted CQE handler, leading to a segfault.

So if the only way to make all pending entries unavailable in the kernel is calling do_exit or begin_new_exec, I think we should do some workarounds in QEMU.

Thanks,
Brian

Reply via email to