From 5cf56c4b23125e27fad481c67b540689ad4adcd8 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Fri, 7 Oct 2011 19:57:39 -0600 Subject: [PATCH] snapshot: implement LIST_LEAVES flag in qemu With the recent refactoring of qemu snapshot relationships, it is now trivial to filter on leaves. * src/conf/domain_conf.c (virDomainSnapshotObjListCount) (virDomainSnapshotObjListCopyNames): Handle new flag. * src/qemu/qemu_driver.c (qemuDomainSnapshotListNames) (qemuDomainSnapshotNum, qemuDomainSnapshotListChildrenNames) (qemuDomainSnapshotNumChildren): Pass new flag through. --- src/conf/domain_conf.c | 8 ++++++-- src/qemu/qemu_driver.c | 12 ++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index da72ebfd85..8cd493b3a6 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -12170,7 +12170,9 @@ static void virDomainSnapshotObjListCopyNames(void *payload, if (data->oom) return; - if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_ROOTS) && obj->def->parent) + /* LIST_ROOTS/LIST_DESCENDANTS was handled by caller, + * LIST_METADATA is a no-op if we get this far. */ + if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_LEAVES) && obj->nchildren) return; if (data->numnames < data->maxnames) { @@ -12255,7 +12257,9 @@ static void virDomainSnapshotObjListCount(void *payload, virDomainSnapshotObjPtr obj = payload; struct virDomainSnapshotNumData *data = opaque; - if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_ROOTS) && obj->def->parent) + /* LIST_ROOTS/LIST_DESCENDANTS was handled by caller, + * LIST_METADATA is a no-op if we get this far. */ + if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_LEAVES) && obj->nchildren) return; data->count++; } diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ec01cd5f76..212ee3340a 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -9415,7 +9415,8 @@ static int qemuDomainSnapshotListNames(virDomainPtr domain, char **names, int n = -1; virCheckFlags(VIR_DOMAIN_SNAPSHOT_LIST_ROOTS | - VIR_DOMAIN_SNAPSHOT_LIST_METADATA, -1); + VIR_DOMAIN_SNAPSHOT_LIST_METADATA | + VIR_DOMAIN_SNAPSHOT_LIST_LEAVES, -1); qemuDriverLock(driver); vm = virDomainFindByUUID(&driver->domains, domain->uuid); @@ -9445,7 +9446,8 @@ static int qemuDomainSnapshotNum(virDomainPtr domain, int n = -1; virCheckFlags(VIR_DOMAIN_SNAPSHOT_LIST_ROOTS | - VIR_DOMAIN_SNAPSHOT_LIST_METADATA, -1); + VIR_DOMAIN_SNAPSHOT_LIST_METADATA | + VIR_DOMAIN_SNAPSHOT_LIST_LEAVES, -1); qemuDriverLock(driver); vm = virDomainFindByUUID(&driver->domains, domain->uuid); @@ -9482,7 +9484,8 @@ qemuDomainSnapshotListChildrenNames(virDomainSnapshotPtr snapshot, int n = -1; virCheckFlags(VIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS | - VIR_DOMAIN_SNAPSHOT_LIST_METADATA, -1); + VIR_DOMAIN_SNAPSHOT_LIST_METADATA | + VIR_DOMAIN_SNAPSHOT_LIST_LEAVES, -1); qemuDriverLock(driver); vm = virDomainFindByUUID(&driver->domains, snapshot->domain->uuid); @@ -9521,7 +9524,8 @@ qemuDomainSnapshotNumChildren(virDomainSnapshotPtr snapshot, int n = -1; virCheckFlags(VIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS | - VIR_DOMAIN_SNAPSHOT_LIST_METADATA, -1); + VIR_DOMAIN_SNAPSHOT_LIST_METADATA | + VIR_DOMAIN_SNAPSHOT_LIST_LEAVES, -1); qemuDriverLock(driver); vm = virDomainFindByUUID(&driver->domains, snapshot->domain->uuid); -- GitLab