mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
qemu: Move 'qemuDomainSnapshotForEachQcow2(Raw)' to qemu_snapshot.c
The functions are exclusively used in the snapshot module. Move and rename them: qemuDomainSnapshotForEachQcow2Raw -> qemuSnapshotForEachQcow2Internal qemuDomainSnapshotForEachQcow2 -> qemuSnapshotForEachQcow2 Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
60838fee08
commit
5dfd0a0ce8
@ -5705,87 +5705,6 @@ qemuDomainSnapshotWriteMetadata(virDomainObj *vm,
|
||||
}
|
||||
|
||||
|
||||
/* The domain is expected to be locked and inactive. Return -1 on normal
|
||||
* failure, 1 if we skipped a disk due to try_all. */
|
||||
static int
|
||||
qemuDomainSnapshotForEachQcow2Raw(virDomainDef *def,
|
||||
virDomainMomentObj *snap,
|
||||
const char *op,
|
||||
bool try_all,
|
||||
int ndisks)
|
||||
{
|
||||
virDomainSnapshotDef *snapdef = virDomainSnapshotObjGetDef(snap);
|
||||
size_t i;
|
||||
bool skipped = false;
|
||||
|
||||
for (i = 0; i < ndisks; i++) {
|
||||
g_autoptr(virCommand) cmd = virCommandNewArgList("qemu-img", "snapshot",
|
||||
op, snap->def->name, NULL);
|
||||
int format = virDomainDiskGetFormat(def->disks[i]);
|
||||
|
||||
/* FIXME: we also need to handle LVM here */
|
||||
if (def->disks[i]->device != VIR_DOMAIN_DISK_DEVICE_DISK ||
|
||||
snapdef->disks[i].snapshot != VIR_DOMAIN_SNAPSHOT_LOCATION_INTERNAL)
|
||||
continue;
|
||||
|
||||
if (!virStorageSourceIsLocalStorage(def->disks[i]->src)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
||||
_("can't manipulate inactive snapshots of disk '%1$s'"),
|
||||
def->disks[i]->dst);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (format > 0 && format != VIR_STORAGE_FILE_QCOW2) {
|
||||
if (try_all) {
|
||||
/* Continue on even in the face of error, since other
|
||||
* disks in this VM may have the same snapshot name.
|
||||
*/
|
||||
VIR_WARN("skipping snapshot action on %s",
|
||||
def->disks[i]->dst);
|
||||
skipped = true;
|
||||
continue;
|
||||
} else if (STREQ(op, "-c") && i) {
|
||||
/* We must roll back partial creation by deleting
|
||||
* all earlier snapshots. */
|
||||
qemuDomainSnapshotForEachQcow2Raw(def, snap, "-d", false, i);
|
||||
}
|
||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
||||
_("Disk device '%1$s' does not support snapshotting"),
|
||||
def->disks[i]->dst);
|
||||
return -1;
|
||||
}
|
||||
|
||||
virCommandAddArg(cmd, virDomainDiskGetSource(def->disks[i]));
|
||||
|
||||
if (virCommandRun(cmd, NULL) < 0) {
|
||||
if (try_all) {
|
||||
VIR_WARN("skipping snapshot action on %s",
|
||||
def->disks[i]->dst);
|
||||
skipped = true;
|
||||
continue;
|
||||
} else if (STREQ(op, "-c") && i) {
|
||||
/* We must roll back partial creation by deleting
|
||||
* all earlier snapshots. */
|
||||
qemuDomainSnapshotForEachQcow2Raw(def, snap, "-d", false, i);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return skipped ? 1 : 0;
|
||||
}
|
||||
|
||||
/* The domain is expected to be locked and inactive. Return -1 on normal
|
||||
* failure, 1 if we skipped a disk due to try_all. */
|
||||
int
|
||||
qemuDomainSnapshotForEachQcow2(virDomainDef *def,
|
||||
virDomainMomentObj *snap,
|
||||
const char *op,
|
||||
bool try_all)
|
||||
{
|
||||
return qemuDomainSnapshotForEachQcow2Raw(def, snap, op, try_all, def->ndisks);
|
||||
}
|
||||
|
||||
/* Hash iterator callback to discard multiple snapshots. */
|
||||
int qemuDomainMomentDiscardAll(void *payload,
|
||||
const char *name G_GNUC_UNUSED,
|
||||
|
@ -670,11 +670,6 @@ int qemuDomainSnapshotWriteMetadata(virDomainObj *vm,
|
||||
virDomainXMLOption *xmlopt,
|
||||
const char *snapshotDir);
|
||||
|
||||
int qemuDomainSnapshotForEachQcow2(virDomainDef *def,
|
||||
virDomainMomentObj *snap,
|
||||
const char *op,
|
||||
bool try_all);
|
||||
|
||||
typedef struct _virQEMUMomentRemove virQEMUMomentRemove;
|
||||
struct _virQEMUMomentRemove {
|
||||
virQEMUDriver *driver;
|
||||
|
@ -249,12 +249,95 @@ qemuSnapshotCreateQcow2Files(virDomainDef *def,
|
||||
}
|
||||
|
||||
|
||||
/* The domain is expected to be locked and inactive. Return -1 on normal
|
||||
* failure, 1 if we skipped a disk due to try_all. */
|
||||
static int
|
||||
qemuSnapshotForEachQcow2Internal(virDomainDef *def,
|
||||
virDomainMomentObj *snap,
|
||||
const char *op,
|
||||
bool try_all,
|
||||
int ndisks)
|
||||
{
|
||||
virDomainSnapshotDef *snapdef = virDomainSnapshotObjGetDef(snap);
|
||||
size_t i;
|
||||
bool skipped = false;
|
||||
|
||||
for (i = 0; i < ndisks; i++) {
|
||||
g_autoptr(virCommand) cmd = virCommandNewArgList("qemu-img", "snapshot",
|
||||
op, snap->def->name, NULL);
|
||||
int format = virDomainDiskGetFormat(def->disks[i]);
|
||||
|
||||
/* FIXME: we also need to handle LVM here */
|
||||
if (def->disks[i]->device != VIR_DOMAIN_DISK_DEVICE_DISK ||
|
||||
snapdef->disks[i].snapshot != VIR_DOMAIN_SNAPSHOT_LOCATION_INTERNAL)
|
||||
continue;
|
||||
|
||||
if (!virStorageSourceIsLocalStorage(def->disks[i]->src)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
||||
_("can't manipulate inactive snapshots of disk '%1$s'"),
|
||||
def->disks[i]->dst);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (format > 0 && format != VIR_STORAGE_FILE_QCOW2) {
|
||||
if (try_all) {
|
||||
/* Continue on even in the face of error, since other
|
||||
* disks in this VM may have the same snapshot name.
|
||||
*/
|
||||
VIR_WARN("skipping snapshot action on %s",
|
||||
def->disks[i]->dst);
|
||||
skipped = true;
|
||||
continue;
|
||||
} else if (STREQ(op, "-c") && i) {
|
||||
/* We must roll back partial creation by deleting
|
||||
* all earlier snapshots. */
|
||||
qemuSnapshotForEachQcow2Internal(def, snap, "-d", false, i);
|
||||
}
|
||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
||||
_("Disk device '%1$s' does not support snapshotting"),
|
||||
def->disks[i]->dst);
|
||||
return -1;
|
||||
}
|
||||
|
||||
virCommandAddArg(cmd, virDomainDiskGetSource(def->disks[i]));
|
||||
|
||||
if (virCommandRun(cmd, NULL) < 0) {
|
||||
if (try_all) {
|
||||
VIR_WARN("skipping snapshot action on %s",
|
||||
def->disks[i]->dst);
|
||||
skipped = true;
|
||||
continue;
|
||||
} else if (STREQ(op, "-c") && i) {
|
||||
/* We must roll back partial creation by deleting
|
||||
* all earlier snapshots. */
|
||||
qemuSnapshotForEachQcow2Internal(def, snap, "-d", false, i);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return skipped ? 1 : 0;
|
||||
}
|
||||
|
||||
|
||||
/* The domain is expected to be locked and inactive. Return -1 on normal
|
||||
* failure, 1 if we skipped a disk due to try_all. */
|
||||
static int
|
||||
qemuSnapshotForEachQcow2(virDomainDef *def,
|
||||
virDomainMomentObj *snap,
|
||||
const char *op,
|
||||
bool try_all)
|
||||
{
|
||||
return qemuSnapshotForEachQcow2Internal(def, snap, op, try_all, def->ndisks);
|
||||
}
|
||||
|
||||
|
||||
/* The domain is expected to be locked and inactive. */
|
||||
static int
|
||||
qemuSnapshotCreateInactiveInternal(virDomainObj *vm,
|
||||
virDomainMomentObj *snap)
|
||||
{
|
||||
return qemuDomainSnapshotForEachQcow2(vm->def, snap, "-c", false);
|
||||
return qemuSnapshotForEachQcow2(vm->def, snap, "-c", false);
|
||||
}
|
||||
|
||||
|
||||
@ -2551,7 +2634,7 @@ qemuSnapshotInternalRevertInactive(virDomainObj *vm,
|
||||
}
|
||||
|
||||
/* Try all disks, but report failure if we skipped any. */
|
||||
if (qemuDomainSnapshotForEachQcow2(def, snap, "-a", true) != 0)
|
||||
if (qemuSnapshotForEachQcow2(def, snap, "-a", true) != 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
@ -3919,7 +4002,7 @@ qemuSnapshotDiscardImpl(virDomainObj *vm,
|
||||
if (qemuSnapshotDiscardExternal(vm, snap, externalData) < 0)
|
||||
return -1;
|
||||
} else {
|
||||
if (qemuDomainSnapshotForEachQcow2(def, snap, "-d", true) < 0)
|
||||
if (qemuSnapshotForEachQcow2(def, snap, "-d", true) < 0)
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user