On 15.10.20 17:41, Kevin Wolf wrote: > Am 15.10.2020 um 16:46 hat Max Reitz geschrieben: >> On 15.10.20 10:57, Kevin Wolf wrote: >>> Am 22.09.2020 um 12:49 hat Max Reitz geschrieben:
[...] >>>> +static void fuse_export_shutdown(BlockExport *blk_exp) >>>> +{ >>>> + FuseExport *exp = container_of(blk_exp, FuseExport, common); >>>> + >>>> + if (exp->fuse_session) { >>>> + fuse_session_exit(exp->fuse_session); >>>> + >>>> + if (exp->mounted) { >>>> + fuse_session_unmount(exp->fuse_session); >>>> + exp->mounted = false; >>>> + } >>>> + >>>> + if (exp->fd_handler_set_up) { >>>> + aio_set_fd_handler(exp->common.ctx, >>>> + fuse_session_fd(exp->fuse_session), true, >>>> + NULL, NULL, NULL, NULL); >>>> + exp->fd_handler_set_up = false; >>>> + } >>>> + >>>> + fuse_session_destroy(exp->fuse_session); >>>> + exp->fuse_session = NULL; >>> >>> What happens if a request is still in flight? >>> >>> Oh, can't happen because the driver is fully synchronous after this >>> series. Fair enough, making it asynchronous can come on top of it. >> >> (I had multiple approaches of handling parallel requests, but none made >> a substantial performance difference, which is why I left the driver in >> the most simple form for this first proposal.) > > I think the more relevant part is that we'd block the guest or anything > else running in the main loop while doing I/O. > > Not a problem if you spawn a new qemu-storage-daemon just for this FUSE > export, but if you want to have multiple exports, or export from the > system emulator, you probably don't want to have synchronous operations. Ah, hm. Hmm. O:) Does NBD work any different, though? I had always assumed it runs in the BB’s context. Max
signature.asc
Description: OpenPGP digital signature