Hi, This series first contains some two bug fix patches (one more than the other), then a couple of small modifications to prepare for the big ones:
We remove libfuse from the request processing path, only using it for mounting. This does not really have a performance impact (but see the benchmark results on that patch’s commit message), but it allows me to sleep easier when it comes to concurrency, because I don’t know what guarantees libfuse makes for coroutine concurrency. In general, I just don’t feel that libfuse is really the best choice for us: It seems primarily designed for projects that only provide a filesystem, and nothing else, i.e. it provides a variety of main loops and you’re supposed to use them. QEMU however has its own main loop and event processing, so the opacity of libfuse’s request processing makes me uneasy. Also, FUSE request parsing is not that hard. Then, this series makes request processing run in coroutines. Finally, it adds FUSE multi-threading (i.e. one FUSE FD per I/O thread). Hanna Czenczek (15): fuse: Copy write buffer content before polling fuse: Ensure init clean-up even with error_fatal fuse: Remove superfluous empty line fuse: Explicitly set inode ID to 1 fuse: Change setup_... to mount_fuse_export() fuse: Fix mount options fuse: Set direct_io and parallel_direct_writes fuse: Introduce fuse_{at,de}tach_handlers() fuse: Introduce fuse_{inc,dec}_in_flight() fuse: Add halted flag fuse: Manually process requests (without libfuse) fuse: Reduce max read size fuse: Process requests in coroutines fuse: Implement multi-threading fuse: Increase MAX_WRITE_SIZE with a second buffer qapi/block-export.json | 8 +- block/export/fuse.c | 1227 ++++++++++++++++++++++++++++-------- tests/qemu-iotests/308 | 4 +- tests/qemu-iotests/308.out | 5 +- 4 files changed, 965 insertions(+), 279 deletions(-) -- 2.48.1