On 23.10.25 13:47, Kevin Wolf wrote:
Am 01.07.2025 um 13:44 hat Hanna Czenczek geschrieben:FUSE allows creating multiple request queues by "cloning" /dev/fuse FDs (via open("/dev/fuse") + ioctl(FUSE_DEV_IOC_CLONE)).We can use this to implement multi-threading. For configuration, we don't need any more information beyond the simple array provided by the core block export interface: The FUSE kernel driver feeds these FDs in a round-robin fashion, so all of them are equivalent and we want to have exactly one per thread. [...] @@ -451,6 +553,16 @@ static void fuse_export_delete(BlockExport *blk_exp) { FuseExport *exp = container_of(blk_exp, FuseExport, common);+ for (int i = 0; i < exp->num_queues; i++) {+ FuseQueue *q = &exp->queues[i]; + + /* Queue 0's FD belongs to the FUSE session */ + if (i > 0 && q->fuse_fd >= 0) {Why not start the loop with i = 1 instead of starting at 0 and then not doing anything in the first iteration?
Er, right.
(I love the >= 0, running FUSE over stdin must be fun. :-))
Wouldn’t be too surprised if someone already did that… Hanna
+ close(q->fuse_fd); + } + } + g_free(exp->queues); + if (exp->fuse_session) { if (exp->mounted) { fuse_session_unmount(exp->fuse_session);Kevin
