[libvirt] [PATCH 12/n] conf: let snapshots share disk source struct
Peter Krempa
pkrempa at redhat.com
Mon Mar 31 08:56:54 UTC 2014
On 03/29/14 23:20, Eric Blake wrote:
> Now that we have a common struct, it's time to start using it!
> Since external snapshots make a longer backing chain, it is
> only natural to use the same struct for the file created by
> the snapshot as what we use for <domain> disks.
>
> * src/conf/snapshot_conf.h (_virDomainSnapshotDiskDef): Use common
> struct instead of open-coded duplicate fields.
> * src/conf/snapshot_conf.c (virDomainSnapshotDiskDefClear)
> (virDomainSnapshotDiskDefParseXML, virDomainSnapshotAlignDisks)
> (virDomainSnapshotDiskDefFormat)
> (virDomainSnapshotDiskGetActualType): Adjust clients.
> * src/qemu/qemu_conf.c (qemuTranslateSnapshotDiskSourcePool):
> Likewise.
> * src/qemu/qemu_driver.c (qemuDomainSnapshotDiskGetSourceString)
> (qemuDomainSnapshotCreateInactiveExternal)
> (qemuDomainSnapshotPrepareDiskExternalOverlayActive)
> (qemuDomainSnapshotPrepareDiskExternal)
> (qemuDomainSnapshotPrepare)
> (qemuDomainSnapshotCreateSingleDiskActive): Likewise.
> * src/storage/storage_driver.c
> (virStorageFileInitFromSnapshotDef): Likewise.
>
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
> src/conf/snapshot_conf.c | 68 +++++++++++++++++------------------
> src/conf/snapshot_conf.h | 8 ++---
> src/qemu/qemu_conf.c | 2 +-
> src/qemu/qemu_driver.c | 86 ++++++++++++++++++++++----------------------
> src/storage/storage_driver.c | 8 ++---
> 5 files changed, 85 insertions(+), 87 deletions(-)
>
> diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c
> index ebb3bb4..3bd4732 100644
> @@ -632,16 +632,16 @@ virDomainSnapshotDiskDefFormat(virBufferPtr buf,
> virBufferAsprintf(buf, " type='%s'>\n", virStorageTypeToString(type));
> virBufferAdjustIndent(buf, 2);
>
> - if (disk->format > 0)
> + if (disk->src.format > 0)
> virBufferEscapeString(buf, "<driver type='%s'/>\n",
> - virStorageFileFormatTypeToString(disk->format));
> + virStorageFileFormatTypeToString(disk->src.format));
> virDomainDiskSourceDefFormatInternal(buf,
Hmm, now that we have a common struct, we can unify the source formatter
and have it accept the common struct instead of splitting out separate
fields ...
> type,
> - disk->file,
> + disk->src.path,
> 0,
> - disk->protocol,
> - disk->nhosts,
> - disk->hosts,
> + disk->src.protocol,
> + disk->src.nhosts,
> + disk->src.hosts,
> 0, NULL, NULL, 0);
>
> virBufferAdjustIndent(buf, -2);
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 9d48a46..9a2de12 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -12028,10 +12028,10 @@ qemuDomainSnapshotDiskGetSourceString(virDomainSnapshotDiskDefPtr disk,
> *source = NULL;
>
> return qemuGetDriveSourceString(virDomainSnapshotDiskGetActualType(disk),
same here. This function can now be refactored to take the struct
instead of the fields separately.
> - disk->file,
> - disk->protocol,
> - disk->nhosts,
> - disk->hosts,
> + disk->src.path,
> + disk->src.protocol,
> + disk->src.nhosts,
> + disk->src.hosts,
> NULL,
> NULL,
> source);
>
> @@ -12874,9 +12876,9 @@ qemuDomainSnapshotCreateSingleDiskActive(virQEMUDriverPtr driver,
>
> disk->src.path = newsource;
> disk->src.format = format;
> - disk->src.type = snap->type;
> - disk->src.protocol = snap->protocol;
> - disk->src.nhosts = snap->nhosts;
> + disk->src.type = snap->src.type;
> + disk->src.protocol = snap->src.protocol;
> + disk->src.nhosts = snap->src.nhosts;
> disk->src.hosts = newhosts;
And here we can introduce a function to copy the source instead of doing
it manually.
>
> newsource = NULL;
> @@ -12889,9 +12891,9 @@ qemuDomainSnapshotCreateSingleDiskActive(virQEMUDriverPtr driver,
>
> persistDisk->src.path = persistSource;
> persistDisk->src.format = format;
> - persistDisk->src.type = snap->type;
> - persistDisk->src.protocol = snap->protocol;
> - persistDisk->src.nhosts = snap->nhosts;
> + persistDisk->src.type = snap->src.type;
> + persistDisk->src.protocol = snap->src.protocol;
> + persistDisk->src.nhosts = snap->src.nhosts;
> persistDisk->src.hosts = persistHosts;
>
> persistSource = NULL;
diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
> index cdb8536..6fca3d2 100644
> --- a/src/storage/storage_driver.c
> +++ b/src/storage/storage_driver.c
> @@ -2802,10 +2802,10 @@ virStorageFilePtr
> virStorageFileInitFromSnapshotDef(virDomainSnapshotDiskDefPtr disk)
> {
> return virStorageFileInitInternal(virDomainSnapshotDiskGetActualType(disk),
> - disk->file,
> - disk->protocol,
> - disk->nhosts,
> - disk->hosts);
> + disk->src.path,
> + disk->src.protocol,
> + disk->src.nhosts,
> + disk->src.hosts);
> }
>
>
ACK to the patch. The proposed changes are definitely separable and
better to review separately.
Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 901 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140331/3d5e6306/attachment-0001.sig>
More information about the libvir-list
mailing list