Commit a2d665c1 authored by John Snow's avatar John Snow Committed by Max Reitz
Browse files

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: default avatarJohn Snow <jsnow@redhat.com>
Message-id: 20190521210053.8864-1-jsnow@redhat.com
Signed-off-by: default avatarMax Reitz <mreitz@redhat.com>
parent 6388903e
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -3450,11 +3450,16 @@ static BlockJob *do_drive_backup(DriveBackup *backup, JobTxn *txn,
        backup->compress = false;
    }

    bs = qmp_get_root_bs(backup->device, errp);
    bs = bdrv_lookup_bs(backup->device, backup->device, errp);
    if (!bs) {
        return NULL;
    }

    if (!bs->drv) {
        error_setg(errp, "Device has no medium");
        return NULL;
    }

    aio_context = bdrv_get_aio_context(bs);
    aio_context_acquire(aio_context);

+1 −1
Original line number Diff line number Diff line
@@ -214,7 +214,7 @@ class BackupTest(iotests.QMPTestCase):
        res = self.vm.qmp('query-block-jobs')
        self.assert_qmp(res, 'return[0]/status', 'concluded')
        # 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,
                                       sync='full', target=self.dest_img,
                                       auto_dismiss=False)