|
@@ -1710,7 +1710,8 @@ static void external_snapshot_prepare(BlkActionState *common,
|
|
|
}
|
|
|
|
|
|
flags = state->old_bs->open_flags;
|
|
|
- flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING | BDRV_O_COPY_ON_READ);
|
|
|
+ flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_COPY_ON_READ);
|
|
|
+ flags |= BDRV_O_NO_BACKING;
|
|
|
|
|
|
/* create new image w/backing file */
|
|
|
mode = s->has_mode ? s->mode : NEW_IMAGE_MODE_ABSOLUTE_PATHS;
|
|
@@ -1735,8 +1736,6 @@ static void external_snapshot_prepare(BlkActionState *common,
|
|
|
qdict_put_str(options, "node-name", snapshot_node_name);
|
|
|
}
|
|
|
qdict_put_str(options, "driver", format);
|
|
|
-
|
|
|
- flags |= BDRV_O_NO_BACKING;
|
|
|
}
|
|
|
|
|
|
state->new_bs = bdrv_open(new_image_file, snapshot_ref, options, flags,
|
|
@@ -3548,6 +3547,9 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp)
|
|
|
backing_mode = MIRROR_OPEN_BACKING_CHAIN;
|
|
|
}
|
|
|
|
|
|
+ /* Don't open backing image in create() */
|
|
|
+ flags |= BDRV_O_NO_BACKING;
|
|
|
+
|
|
|
if ((arg->sync == MIRROR_SYNC_MODE_FULL || !source)
|
|
|
&& arg->mode != NEW_IMAGE_MODE_EXISTING)
|
|
|
{
|
|
@@ -3587,8 +3589,7 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp)
|
|
|
/* Mirroring takes care of copy-on-write using the source's backing
|
|
|
* file.
|
|
|
*/
|
|
|
- target_bs = bdrv_open(arg->target, NULL, options,
|
|
|
- flags | BDRV_O_NO_BACKING, errp);
|
|
|
+ target_bs = bdrv_open(arg->target, NULL, options, flags, errp);
|
|
|
if (!target_bs) {
|
|
|
goto out;
|
|
|
}
|