On 13.06.19 00:08, Max Reitz wrote: > Quitting qemu should lead to qemu exiting pretty much immediately. That > means if you have a block job running on a throttled block node, the > node should ignore its throttling and the job should be cancelled > immediately. > > Unfortunately, that is not what happens. Currently, the node will be > drained (with a bdrv_drain_all()), and then again unquiesced (because > bdrv_drain_all() ends). Then, the block job is cancelled; but at this > point, the node is no longer drained, so it will block, as it befits a > throttling node. > > To fix this issue, we have to keep all nodes drained while we cancel all > block jobs when quitting qemu. This will make the throttle node ignore > its throttling and thus let the block job cancel immediately. I forgot to mention: This series depends on “block: Keep track of parent quiescing”, specifically patch 3 (“iotests: Add @has_quit to vm.shutdown()”). Based-on: <20190605161118.14544-1-mreitz@redhat.com> Max > Max Reitz (2): > vl: Drain before (block) job cancel when quitting > iotests: Test quitting with job on throttled node > > vl.c | 11 ++++++++ > tests/qemu-iotests/218 | 55 ++++++++++++++++++++++++++++++++++++-- > tests/qemu-iotests/218.out | 4 +++ > 3 files changed, 68 insertions(+), 2 deletions(-) >