On 22.05.19 16:28, Max Reitz wrote: > This patch adds a test where we cancel a throttled mirror job and > immediately close the VM before it can be cancelled. Doing so will > invoke bdrv_drain_all() while the mirror job tries to drain the > throttled node. When bdrv_drain_all_end() tries to lift its drain on > the throttle node, the job will exit and replace the current root node > of the BB drive0 (which is the job's filter node) by the throttle node. > Before the previous patch, this replacement did not increase drive0's > quiesce_counter by a sufficient amount, so when > bdrv_parent_drained_end() (invoked by bdrv_do_drained_end(), invoked by > bdrv_drain_all_end()) tried to end the drain on all of the throttle > node's parents, it decreased drive0's quiesce_counter below 0 -- which > fails an assertion. > > Signed-off-by: Max Reitz <[email protected]> > --- > tests/qemu-iotests/255 | 54 ++++++++++++++++++++++++++++++++++++++ > tests/qemu-iotests/255.out | 24 +++++++++++++++++ > 2 files changed, 78 insertions(+) > > diff --git a/tests/qemu-iotests/255 b/tests/qemu-iotests/255 > index c0bb37a9b0..b1bbe3ff0a 100755 > --- a/tests/qemu-iotests/255 > +++ b/tests/qemu-iotests/255 > @@ -35,6 +35,10 @@ def blockdev_create(vm, options): > vm.run_job('job0') > iotests.log("") > > +iotests.log('Finishing a commit job with background reads') > +iotests.log('============================================') > +iotests.log('') > + > with iotests.FilePath('t.qcow2') as disk_path, \ > iotests.FilePath('t.qcow2.mid') as mid_path, \ > iotests.FilePath('t.qcow2.base') as base_path, \ > @@ -80,4 +84,54 @@ with iotests.FilePath('t.qcow2') as disk_path, \ > vm.run_job('job0', auto_finalize=False, pre_finalize=start_requests, > auto_dismiss=True) > > + #vm.qmp_log('block-job-cancel', device='job0') > + > + vm.shutdown()
Er, oops, I took so much time with the commit messages that I forgot this. Let me try again... Shamefully, Max
signature.asc
Description: OpenPGP digital signature
