On Sat, Aug 15, 2026 at 01:48:19AM +0800, Zhang Chen wrote: > @@ -139,7 +140,16 @@ BlockExport *blk_exp_add(BlockExportOptions *export, Error **errp) > goto fail; > } > > - new_ctx = iothread_get_aio_context(iothread); > + holder_id = export->id; > + const IOThreadHolder holder = { > + .type = IO_THREAD_HOLDER_KIND_BLOCK_EXPORT, > + .u.block_export.export_id = holder_id, > + }; > + > + new_ctx = iothread_ref_and_get_aio_context(iothread, &holder); > + multithread_count = 1; This changes behavior in: ret = drv->create(exp, export, multithread_ctxs, multithread_count, errp); Now export drivers will see drv->create(exp, export, NULL, 1, errp); ^^^^ ^ Before it was drv->create(exp, export, NULL, 0, errp). fuse_export_create() has an assertion that fails now: if (multithread) { ... } else { /* Guaranteed by common export code */ assert(mt_count == 0); ... }