blockdev: loosen restrictions on drive-backup source node
We mandate that the source node must be a root node; but there's no reason I am aware of that it needs to be restricted to such. In some cases, we need to make sure that there's a medium present, but in the general case we can allow the backup job itself to do the graph checking. This patch helps improve the error message when you try to backup from the same node more than once, which is reflected in the change to test 056. For backups with bitmaps, it will also show a better error message that the bitmap is in use instead of giving you something cryptic like "need a root node." Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1707303 Signed-off-by: John Snow <jsnow@redhat.com> Message-id: 20190521210053.8864-1-jsnow@redhat.com Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
6388903e7c
commit
a2d665c1bc
|
@ -3450,11 +3450,16 @@ static BlockJob *do_drive_backup(DriveBackup *backup, JobTxn *txn,
|
||||||
backup->compress = false;
|
backup->compress = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bs = qmp_get_root_bs(backup->device, errp);
|
bs = bdrv_lookup_bs(backup->device, backup->device, errp);
|
||||||
if (!bs) {
|
if (!bs) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!bs->drv) {
|
||||||
|
error_setg(errp, "Device has no medium");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
aio_context = bdrv_get_aio_context(bs);
|
aio_context = bdrv_get_aio_context(bs);
|
||||||
aio_context_acquire(aio_context);
|
aio_context_acquire(aio_context);
|
||||||
|
|
||||||
|
|
|
@ -214,7 +214,7 @@ class BackupTest(iotests.QMPTestCase):
|
||||||
res = self.vm.qmp('query-block-jobs')
|
res = self.vm.qmp('query-block-jobs')
|
||||||
self.assert_qmp(res, 'return[0]/status', 'concluded')
|
self.assert_qmp(res, 'return[0]/status', 'concluded')
|
||||||
# Leave zombie job un-dismissed, observe a failure:
|
# Leave zombie job un-dismissed, observe a failure:
|
||||||
res = self.qmp_backup_and_wait(serror='Need a root block node',
|
res = self.qmp_backup_and_wait(serror="Node 'drive0' is busy: block device is in use by block job: backup",
|
||||||
device='drive0', format=iotests.imgfmt,
|
device='drive0', format=iotests.imgfmt,
|
||||||
sync='full', target=self.dest_img,
|
sync='full', target=self.dest_img,
|
||||||
auto_dismiss=False)
|
auto_dismiss=False)
|
||||||
|
|
Loading…
Reference in a new issue