From nobody Fri Apr 19 19:50:23 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1552626164108742.5887492522304; Thu, 14 Mar 2019 22:02:44 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 367AE307E043; Fri, 15 Mar 2019 05:02:42 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0706A1001DD4; Fri, 15 Mar 2019 05:02:42 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 7C6C6181A13C; Fri, 15 Mar 2019 05:02:41 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x2F52cbI010752 for ; Fri, 15 Mar 2019 01:02:38 -0400 Received: by smtp.corp.redhat.com (Postfix) id AB0055D75D; Fri, 15 Mar 2019 05:02:38 +0000 (UTC) Received: from blue.redhat.com (ovpn-118-35.phx2.redhat.com [10.3.118.35]) by smtp.corp.redhat.com (Postfix) with ESMTP id E93A45D6A6; Fri, 15 Mar 2019 05:02:37 +0000 (UTC) From: Eric Blake To: libvir-list@redhat.com Date: Fri, 15 Mar 2019 00:02:26 -0500 Message-Id: <20190315050233.10782-2-eblake@redhat.com> In-Reply-To: <20190315050233.10782-1-eblake@redhat.com> References: <20190315050233.10782-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Cc: jtomko@redhat.com, jsnow@redhat.com Subject: [libvirt] [PATCH v6 1/8] snapshot: Split domain forward typedefs into new file X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Fri, 15 Mar 2019 05:02:42 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Right now, snapshot_conf.h is rather large - it deals with three separate types: virDomainSnapshotDef (the snapshot definition as it maps to XML), virDomainSnapshotObj (an object containing a def and the relationship to other snapshots), and virDomainSnapshotObjList (a list of snapshot objects), where two of the three types are currently public rather than opaque. What's more, the types are circular: a snapshot def includes a virDomainPtr, which contains a snapshot list, which includes a snapshot object, which includes a snapshot def. In order to split the three objects into separate files, while still allowing each header to use sane typedefs to incomplete pointers, the obvious solution is to lift the typedefs into yet another header, with no other dependencies. Start the split by factoring out all struct typedefs from domain_conf.h (enum typedefs don't get used in function signatures, and function typedefs tend not to suffer from circular referencing, so those stay put). The only other excpetion is virDomainStateReason, which is only ever used directly rather than via a pointer. This patch is just straight code motion (all typedefs are listed in the same order before and after the patch). Signed-off-by: Eric Blake Reviewed-by: J=C3=A1n Tomko --- src/conf/domain_conf.h | 220 +------------------------------ src/conf/virconftypes.h | 278 +++++++++++++++++++++++++++++++++++++++ src/conf/Makefile.inc.am | 1 + 3 files changed, 281 insertions(+), 218 deletions(-) create mode 100644 src/conf/virconftypes.h diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 50d2173654..538fb50b9e 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1,7 +1,7 @@ /* * domain_conf.h: domain XML processing * - * Copyright (C) 2006-2016 Red Hat, Inc. + * Copyright (C) 2006-2019 Red Hat, Inc. * Copyright (C) 2006-2008 Daniel P. Berrange * Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany. * @@ -28,6 +28,7 @@ # include # include "internal.h" +# include "virconftypes.h" # include "capabilities.h" # include "virstorageencryption.h" # include "cpu_conf.h" @@ -56,111 +57,6 @@ # include "virsavecookie.h" # include "virresctrl.h" -/* forward declarations of all device types, required by - * virDomainDeviceDef - */ -typedef struct _virDomainDiskDef virDomainDiskDef; -typedef virDomainDiskDef *virDomainDiskDefPtr; - -typedef struct _virDomainControllerDef virDomainControllerDef; -typedef virDomainControllerDef *virDomainControllerDefPtr; - -typedef struct _virDomainLeaseDef virDomainLeaseDef; -typedef virDomainLeaseDef *virDomainLeaseDefPtr; - -typedef struct _virDomainFSDef virDomainFSDef; -typedef virDomainFSDef *virDomainFSDefPtr; - -typedef struct _virDomainNetDef virDomainNetDef; -typedef virDomainNetDef *virDomainNetDefPtr; - -typedef struct _virDomainInputDef virDomainInputDef; -typedef virDomainInputDef *virDomainInputDefPtr; - -typedef struct _virDomainSoundCodecDef virDomainSoundCodecDef; -typedef virDomainSoundCodecDef *virDomainSoundCodecDefPtr; - -typedef struct _virDomainSoundDef virDomainSoundDef; -typedef virDomainSoundDef *virDomainSoundDefPtr; - -typedef struct _virDomainVideoDef virDomainVideoDef; -typedef virDomainVideoDef *virDomainVideoDefPtr; - -typedef struct _virDomainHostdevDef virDomainHostdevDef; -typedef virDomainHostdevDef *virDomainHostdevDefPtr; - -typedef struct _virDomainWatchdogDef virDomainWatchdogDef; -typedef virDomainWatchdogDef *virDomainWatchdogDefPtr; - -typedef struct _virDomainGraphicsDef virDomainGraphicsDef; -typedef virDomainGraphicsDef *virDomainGraphicsDefPtr; - -typedef struct _virDomainHubDef virDomainHubDef; -typedef virDomainHubDef *virDomainHubDefPtr; - -typedef struct _virDomainRedirdevDef virDomainRedirdevDef; -typedef virDomainRedirdevDef *virDomainRedirdevDefPtr; - -typedef struct _virDomainRedirFilterUSBDevDef virDomainRedirFilterUSBDevDe= f; -typedef virDomainRedirFilterUSBDevDef *virDomainRedirFilterUSBDevDefPtr; - -typedef struct _virDomainRedirFilterDef virDomainRedirFilterDef; -typedef virDomainRedirFilterDef *virDomainRedirFilterDefPtr; - -typedef struct _virDomainSmartcardDef virDomainSmartcardDef; -typedef virDomainSmartcardDef *virDomainSmartcardDefPtr; - -typedef struct _virDomainChrDef virDomainChrDef; -typedef virDomainChrDef *virDomainChrDefPtr; - -typedef struct _virDomainMemballoonDef virDomainMemballoonDef; -typedef virDomainMemballoonDef *virDomainMemballoonDefPtr; - -typedef struct _virDomainNVRAMDef virDomainNVRAMDef; -typedef virDomainNVRAMDef *virDomainNVRAMDefPtr; - -typedef struct _virDomainSnapshotObj virDomainSnapshotObj; -typedef virDomainSnapshotObj *virDomainSnapshotObjPtr; - -typedef struct _virDomainSnapshotObjList virDomainSnapshotObjList; -typedef virDomainSnapshotObjList *virDomainSnapshotObjListPtr; - -typedef struct _virDomainRNGDef virDomainRNGDef; -typedef virDomainRNGDef *virDomainRNGDefPtr; - -typedef struct _virDomainIdMapEntry virDomainIdMapEntry; -typedef virDomainIdMapEntry *virDomainIdMapEntryPtr; - -typedef struct _virDomainIdMapDef virDomainIdMapDef; -typedef virDomainIdMapDef *virDomainIdMapDefPtr; - -typedef struct _virDomainPanicDef virDomainPanicDef; -typedef virDomainPanicDef *virDomainPanicDefPtr; - -typedef struct _virDomainMemoryDef virDomainMemoryDef; -typedef virDomainMemoryDef *virDomainMemoryDefPtr; - -/* forward declarations virDomainChrSourceDef, required by - * virDomainNetDef - */ -typedef struct _virDomainChrSourceDef virDomainChrSourceDef; -typedef virDomainChrSourceDef *virDomainChrSourceDefPtr; - -typedef struct _virDomainShmemDef virDomainShmemDef; -typedef virDomainShmemDef *virDomainShmemDefPtr; - -typedef struct _virDomainTPMDef virDomainTPMDef; -typedef virDomainTPMDef *virDomainTPMDefPtr; - -typedef struct _virDomainIOMMUDef virDomainIOMMUDef; -typedef virDomainIOMMUDef *virDomainIOMMUDefPtr; - -typedef struct _virDomainVsockDef virDomainVsockDef; -typedef virDomainVsockDef *virDomainVsockDefPtr; - -typedef struct _virDomainVirtioOptions virDomainVirtioOptions; -typedef virDomainVirtioOptions *virDomainVirtioOptionsPtr; - /* Flags for the 'type' field in virDomainDeviceDef */ typedef enum { VIR_DOMAIN_DEVICE_NONE =3D 0, @@ -192,8 +88,6 @@ typedef enum { VIR_DOMAIN_DEVICE_LAST } virDomainDeviceType; -typedef struct _virDomainDeviceDef virDomainDeviceDef; -typedef virDomainDeviceDef *virDomainDeviceDefPtr; struct _virDomainDeviceDef { int type; /* enum virDomainDeviceType */ union { @@ -260,8 +154,6 @@ typedef enum { VIR_ENUM_DECL(virDomainOS); -typedef struct _virDomainHostdevOrigStates virDomainHostdevOrigStates; -typedef virDomainHostdevOrigStates *virDomainHostdevOrigStatesPtr; struct _virDomainHostdevOrigStates { union { struct { @@ -331,8 +223,6 @@ typedef enum { VIR_ENUM_DECL(virDomainHostdevSubsysSCSIProtocol); -typedef struct _virDomainHostdevSubsysUSB virDomainHostdevSubsysUSB; -typedef virDomainHostdevSubsysUSB *virDomainHostdevSubsysUSBPtr; struct _virDomainHostdevSubsysUSB { bool autoAddress; /* bus/device were filled automatically based on vendor/product */ @@ -343,15 +233,11 @@ struct _virDomainHostdevSubsysUSB { unsigned product; }; -typedef struct _virDomainHostdevSubsysPCI virDomainHostdevSubsysPCI; -typedef virDomainHostdevSubsysPCI *virDomainHostdevSubsysPCIPtr; struct _virDomainHostdevSubsysPCI { virPCIDeviceAddress addr; /* host address */ int backend; /* enum virDomainHostdevSubsysPCIBackendType */ }; -typedef struct _virDomainHostdevSubsysSCSIHost virDomainHostdevSubsysSCSIH= ost; -typedef virDomainHostdevSubsysSCSIHost *virDomainHostdevSubsysSCSIHostPtr; struct _virDomainHostdevSubsysSCSIHost { char *adapter; unsigned bus; @@ -359,14 +245,10 @@ struct _virDomainHostdevSubsysSCSIHost { unsigned long long unit; }; -typedef struct _virDomainHostdevSubsysSCSIiSCSI virDomainHostdevSubsysSCSI= iSCSI; -typedef virDomainHostdevSubsysSCSIiSCSI *virDomainHostdevSubsysSCSIiSCSIPt= r; struct _virDomainHostdevSubsysSCSIiSCSI { virStorageSourcePtr src; }; -typedef struct _virDomainHostdevSubsysSCSI virDomainHostdevSubsysSCSI; -typedef virDomainHostdevSubsysSCSI *virDomainHostdevSubsysSCSIPtr; struct _virDomainHostdevSubsysSCSI { int protocol; /* enum virDomainHostdevSCSIProtocolType */ int sgio; /* enum virDomainDeviceSGIO */ @@ -377,8 +259,6 @@ struct _virDomainHostdevSubsysSCSI { } u; }; -typedef struct _virDomainHostdevSubsysMediatedDev virDomainHostdevSubsysMe= diatedDev; -typedef virDomainHostdevSubsysMediatedDev *virDomainHostdevSubsysMediatedD= evPtr; struct _virDomainHostdevSubsysMediatedDev { int model; /* enum virMediatedDeviceModelType= */ int display; /* virTristateSwitch */ @@ -405,16 +285,12 @@ typedef enum { VIR_ENUM_DECL(virDomainHostdevSubsysSCSIVHostModel); -typedef struct _virDomainHostdevSubsysSCSIVHost virDomainHostdevSubsysSCSI= VHost; -typedef virDomainHostdevSubsysSCSIVHost *virDomainHostdevSubsysSCSIVHostPt= r; struct _virDomainHostdevSubsysSCSIVHost { int protocol; /* enum virDomainHostdevSubsysSCSIHostProtocolType */ char *wwpn; int model; /* enum virDomainHostdevSubsysSCSIVHostModelType */ }; -typedef struct _virDomainHostdevSubsys virDomainHostdevSubsys; -typedef virDomainHostdevSubsys *virDomainHostdevSubsysPtr; struct _virDomainHostdevSubsys { int type; /* enum virDomainHostdevSubsysType */ union { @@ -435,8 +311,6 @@ typedef enum { VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST } virDomainHostdevCapsType; -typedef struct _virDomainHostdevCaps virDomainHostdevCaps; -typedef virDomainHostdevCaps *virDomainHostdevCapsPtr; struct _virDomainHostdevCaps { int type; /* enum virDOmainHostdevCapsType */ union { @@ -588,7 +462,6 @@ typedef enum { VIR_DOMAIN_DISK_MODEL_LAST } virDomainDiskModel; -typedef struct _virDomainBlockIoTuneInfo virDomainBlockIoTuneInfo; struct _virDomainBlockIoTuneInfo { unsigned long long total_bytes_sec; unsigned long long read_bytes_sec; @@ -611,7 +484,6 @@ struct _virDomainBlockIoTuneInfo { unsigned long long read_iops_sec_max_length; unsigned long long write_iops_sec_max_length; }; -typedef virDomainBlockIoTuneInfo *virDomainBlockIoTuneInfoPtr; typedef enum { @@ -808,15 +680,11 @@ typedef enum { (ctrl)->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI2 || \ (ctrl)->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI3)) -typedef struct _virDomainVirtioSerialOpts virDomainVirtioSerialOpts; -typedef virDomainVirtioSerialOpts *virDomainVirtioSerialOptsPtr; struct _virDomainVirtioSerialOpts { int ports; /* -1 =3D=3D undef */ int vectors; /* -1 =3D=3D undef */ }; -typedef struct _virDomainPCIControllerOpts virDomainPCIControllerOpts; -typedef virDomainPCIControllerOpts *virDomainPCIControllerOptsPtr; struct _virDomainPCIControllerOpts { bool pcihole64; unsigned long pcihole64size; @@ -847,14 +715,10 @@ struct _virDomainPCIControllerOpts { int numaNode; }; -typedef struct _virDomainUSBControllerOpts virDomainUSBControllerOpts; -typedef virDomainUSBControllerOpts *virDomainUSBControllerOptsPtr; struct _virDomainUSBControllerOpts { int ports; /* -1 =3D=3D undef */ }; -typedef struct _virDomainXenbusControllerOpts virDomainXenbusControllerOpt= s; -typedef virDomainXenbusControllerOpts *virDomainXenbusControllerOptsPtr; struct _virDomainXenbusControllerOpts { int maxGrantFrames; /* -1 =3D=3D undef */ }; @@ -1000,8 +864,6 @@ typedef enum { * libvirt, but still must maintain backward compatibility, because * different versions of libvirt may read the same data file. */ -typedef struct _virDomainActualNetDef virDomainActualNetDef; -typedef virDomainActualNetDef *virDomainActualNetDefPtr; struct _virDomainActualNetDef { int type; /* enum virDomainNetType */ union { @@ -1231,8 +1093,6 @@ struct _virDomainChrSourceReconnectDef { virTristateBool enabled; unsigned int timeout; }; -typedef struct _virDomainChrSourceReconnectDef virDomainChrSourceReconnect= Def; -typedef virDomainChrSourceReconnectDef *virDomainChrSourceReconnectDefPtr; /* The host side information for a character device. */ @@ -1502,16 +1362,12 @@ typedef enum { VIR_ENUM_DECL(virDomainVideoVGAConf); -typedef struct _virDomainVideoAccelDef virDomainVideoAccelDef; -typedef virDomainVideoAccelDef *virDomainVideoAccelDefPtr; struct _virDomainVideoAccelDef { int accel2d; /* enum virTristateBool */ int accel3d; /* enum virTristateBool */ }; -typedef struct _virDomainVideoDriverDef virDomainVideoDriverDef; -typedef virDomainVideoDriverDef *virDomainVideoDriverDefPtr; struct _virDomainVideoDriverDef { virDomainVideoVGAConf vgaconf; }; @@ -1560,8 +1416,6 @@ typedef enum { VIR_DOMAIN_GRAPHICS_AUTH_CONNECTED_LAST } virDomainGraphicsAuthConnectedType; -typedef struct _virDomainGraphicsAuthDef virDomainGraphicsAuthDef; -typedef virDomainGraphicsAuthDef *virDomainGraphicsAuthDefPtr; struct _virDomainGraphicsAuthDef { char *passwd; bool expires; /* Whether there is an expiry time set */ @@ -1652,8 +1506,6 @@ typedef enum { VIR_DOMAIN_HUB_TYPE_LAST } virDomainHubType; -typedef struct _virDomainGraphicsListenDef virDomainGraphicsListenDef; -typedef virDomainGraphicsListenDef *virDomainGraphicsListenDefPtr; struct _virDomainGraphicsListenDef { virDomainGraphicsListenType type; char *address; @@ -1952,8 +1804,6 @@ typedef enum { VIR_ENUM_DECL(virDomainLockFailure); -typedef struct _virDomainBIOSDef virDomainBIOSDef; -typedef virDomainBIOSDef *virDomainBIOSDefPtr; struct _virDomainBIOSDef { int useserial; /* enum virTristateBool */ /* reboot-timeout parameters */ @@ -1971,8 +1821,6 @@ typedef enum { VIR_ENUM_DECL(virDomainLoader); -typedef struct _virDomainLoaderDef virDomainLoaderDef; -typedef virDomainLoaderDef *virDomainLoaderDefPtr; struct _virDomainLoaderDef { char *path; int readonly; /* enum virTristateBool */ @@ -2006,8 +1854,6 @@ typedef enum { VIR_ENUM_DECL(virDomainHPTResizing); /* Operating system configuration data & machine / arch */ -typedef struct _virDomainOSEnv virDomainOSEnv; -typedef virDomainOSEnv *virDomainOSEnvPtr; struct _virDomainOSEnv { char *name; char *value; @@ -2023,8 +1869,6 @@ typedef enum { VIR_ENUM_DECL(virDomainOsDefFirmware); -typedef struct _virDomainOSDef virDomainOSDef; -typedef virDomainOSDef *virDomainOSDefPtr; struct _virDomainOSDef { int type; virDomainOsDefFirmware firmware; @@ -2101,23 +1945,17 @@ typedef enum { VIR_DOMAIN_CPU_PLACEMENT_MODE_LAST } virDomainCpuPlacementMode; -typedef struct _virDomainThreadSchedParam virDomainThreadSchedParam; -typedef virDomainThreadSchedParam *virDomainThreadSchedParamPtr; struct _virDomainThreadSchedParam { virProcessSchedPolicy policy; int priority; }; -typedef struct _virDomainTimerCatchupDef virDomainTimerCatchupDef; -typedef virDomainTimerCatchupDef *virDomainTimerCatchupDefPtr; struct _virDomainTimerCatchupDef { unsigned long threshold; unsigned long slew; unsigned long limit; }; -typedef struct _virDomainTimerDef virDomainTimerDef; -typedef virDomainTimerDef *virDomainTimerDefPtr; struct _virDomainTimerDef { int name; int present; /* unspecified =3D -1, no =3D 0, yes =3D 1 */ @@ -2149,8 +1987,6 @@ typedef enum { VIR_DOMAIN_CLOCK_BASIS_LAST } virDomainClockBasis; -typedef struct _virDomainClockDef virDomainClockDef; -typedef virDomainClockDef *virDomainClockDefPtr; struct _virDomainClockDef { int offset; @@ -2181,8 +2017,6 @@ struct _virDomainClockDef { }; -typedef struct _virBlkioDevice virBlkioDevice; -typedef virBlkioDevice *virBlkioDevicePtr; struct _virBlkioDevice { char *path; unsigned int weight; @@ -2289,15 +2123,10 @@ struct _virDomainPanicDef { void virBlkioDeviceArrayClear(virBlkioDevicePtr deviceWeights, int ndevices); -typedef struct _virDomainResourceDef virDomainResourceDef; -typedef virDomainResourceDef *virDomainResourceDefPtr; struct _virDomainResourceDef { char *partition; }; -typedef struct _virDomainHugePage virDomainHugePage; -typedef virDomainHugePage *virDomainHugePagePtr; - struct _virDomainHugePage { virBitmapPtr nodemask; /* guest's NUMA node mask */ unsigned long long size; /* hugepage size in KiB */ @@ -2305,9 +2134,6 @@ struct _virDomainHugePage { # define VIR_DOMAIN_CPUMASK_LEN 1024 -typedef struct _virDomainIOThreadIDDef virDomainIOThreadIDDef; -typedef virDomainIOThreadIDDef *virDomainIOThreadIDDefPtr; - struct _virDomainIOThreadIDDef { bool autofill; unsigned int iothread_id; @@ -2320,9 +2146,6 @@ struct _virDomainIOThreadIDDef { void virDomainIOThreadIDDefFree(virDomainIOThreadIDDefPtr def); -typedef struct _virDomainCputune virDomainCputune; -typedef virDomainCputune *virDomainCputunePtr; - struct _virDomainCputune { unsigned long long shares; bool sharesSpecified; @@ -2338,17 +2161,12 @@ struct _virDomainCputune { }; -typedef struct _virDomainResctrlMonDef virDomainResctrlMonDef; -typedef virDomainResctrlMonDef *virDomainResctrlMonDefPtr; struct _virDomainResctrlMonDef { virBitmapPtr vcpus; virResctrlMonitorType tag; virResctrlMonitorPtr instance; }; -typedef struct _virDomainResctrlDef virDomainResctrlDef; -typedef virDomainResctrlDef *virDomainResctrlDefPtr; - struct _virDomainResctrlDef { virBitmapPtr vcpus; virResctrlAllocPtr alloc; @@ -2358,9 +2176,6 @@ struct _virDomainResctrlDef { }; -typedef struct _virDomainVcpuDef virDomainVcpuDef; -typedef virDomainVcpuDef *virDomainVcpuDefPtr; - struct _virDomainVcpuDef { bool online; virTristateBool hotpluggable; @@ -2373,9 +2188,6 @@ struct _virDomainVcpuDef { virObjectPtr privateData; }; -typedef struct _virDomainBlkiotune virDomainBlkiotune; -typedef virDomainBlkiotune *virDomainBlkiotunePtr; - struct _virDomainBlkiotune { unsigned int weight; @@ -2383,9 +2195,6 @@ struct _virDomainBlkiotune { virBlkioDevicePtr devices; }; -typedef struct _virDomainMemtune virDomainMemtune; -typedef virDomainMemtune *virDomainMemtunePtr; - struct _virDomainMemtune { /* total memory size including memory modules in kibibytes, this field * should be accessed only via accessors */ @@ -2415,24 +2224,17 @@ struct _virDomainMemtune { virTristateBool discard; }; -typedef struct _virDomainPowerManagement virDomainPowerManagement; -typedef virDomainPowerManagement *virDomainPowerManagementPtr; - struct _virDomainPowerManagement { /* These options are of type enum virTristateBool */ int s3; int s4; }; -typedef struct _virDomainPerfDef virDomainPerfDef; -typedef virDomainPerfDef *virDomainPerfDefPtr; struct _virDomainPerfDef { /* These options are of type enum virTristateBool */ int events[VIR_PERF_EVENT_LAST]; }; -typedef struct _virDomainKeyWrapDef virDomainKeyWrapDef; -typedef virDomainKeyWrapDef *virDomainKeyWrapDefPtr; struct _virDomainKeyWrapDef { int aes; /* enum virTristateSwitch */ int dea; /* enum virTristateSwitch */ @@ -2445,8 +2247,6 @@ typedef enum { VIR_DOMAIN_LAUNCH_SECURITY_LAST, } virDomainLaunchSecurity; -typedef struct _virDomainSEVDef virDomainSEVDef; -typedef virDomainSEVDef *virDomainSEVDefPtr; struct _virDomainSEVDef { int sectype; /* enum virDomainLaunchSecurity */ @@ -2502,8 +2302,6 @@ struct _virDomainVirtioOptions { * NB: if adding to this struct, virDomainDefCheckABIStability * may well need an update */ -typedef struct _virDomainDef virDomainDef; -typedef virDomainDef *virDomainDefPtr; struct _virDomainDef { int virtType; /* enum virDomainVirtType */ int id; @@ -2703,8 +2501,6 @@ struct _virDomainStateReason { int reason; }; -typedef struct _virDomainObj virDomainObj; -typedef virDomainObj *virDomainObjPtr; struct _virDomainObj { virObjectLockable parent; virCond cond; @@ -2752,12 +2548,6 @@ typedef enum { } virDomainDefFeatures; -/* This structure holds various callbacks and data needed - * while parsing and creating domain XMLs */ -typedef struct _virDomainXMLOption virDomainXMLOption; -typedef virDomainXMLOption *virDomainXMLOptionPtr; - - /* Called after everything else has been parsed, for adjusting basics. * This has similar semantics to virDomainDefPostParseCallback, but no * parseOpaque is used. This callback is run prior to @@ -2821,8 +2611,6 @@ typedef int (*virDomainDeviceDefValidateCallback)(con= st virDomainDeviceDef *dev, const virDomainDef *def, void *opaque); -typedef struct _virDomainDefParserConfig virDomainDefParserConfig; -typedef virDomainDefParserConfig *virDomainDefParserConfigPtr; struct _virDomainDefParserConfig { /* driver domain definition callbacks */ virDomainDefPostParseBasicCallback domainPostParseBasicCallback; @@ -2867,8 +2655,6 @@ typedef int (*virDomainXMLPrivateDataStorageSourceFor= matFunc)(virStorageSourcePt virBufferPtr= buf); -typedef struct _virDomainXMLPrivateDataCallbacks virDomainXMLPrivateDataCa= llbacks; -typedef virDomainXMLPrivateDataCallbacks *virDomainXMLPrivateDataCallbacks= Ptr; struct _virDomainXMLPrivateDataCallbacks { virDomainXMLPrivateDataAllocFunc alloc; virDomainXMLPrivateDataFreeFunc free; @@ -2893,8 +2679,6 @@ struct _virDomainXMLPrivateDataCallbacks { typedef bool (*virDomainABIStabilityDomain)(const virDomainDef *src, const virDomainDef *dst); -typedef struct _virDomainABIStability virDomainABIStability; -typedef virDomainABIStability *virDomainABIStabilityPtr; struct _virDomainABIStability { virDomainABIStabilityDomain domain; }; diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h new file mode 100644 index 0000000000..0e0dc3da03 --- /dev/null +++ b/src/conf/virconftypes.h @@ -0,0 +1,278 @@ +/* + * virconftypes.h: struct typedefs to avoid circular inclusion + * (derived from domain_conf.h) + * + * Copyright (C) 2006-2019 Red Hat, Inc. + * Copyright (C) 2006-2008 Daniel P. Berrange + * Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#ifndef LIBVIRT_VIRCONFTYPES_H +# define LIBVIRT_VIRCONFTYPES_H + +/* forward declarations of various types required in src/conf */ + +typedef struct _virDomainDiskDef virDomainDiskDef; +typedef virDomainDiskDef *virDomainDiskDefPtr; + +typedef struct _virDomainControllerDef virDomainControllerDef; +typedef virDomainControllerDef *virDomainControllerDefPtr; + +typedef struct _virDomainLeaseDef virDomainLeaseDef; +typedef virDomainLeaseDef *virDomainLeaseDefPtr; + +typedef struct _virDomainFSDef virDomainFSDef; +typedef virDomainFSDef *virDomainFSDefPtr; + +typedef struct _virDomainNetDef virDomainNetDef; +typedef virDomainNetDef *virDomainNetDefPtr; + +typedef struct _virDomainInputDef virDomainInputDef; +typedef virDomainInputDef *virDomainInputDefPtr; + +typedef struct _virDomainSoundCodecDef virDomainSoundCodecDef; +typedef virDomainSoundCodecDef *virDomainSoundCodecDefPtr; + +typedef struct _virDomainSoundDef virDomainSoundDef; +typedef virDomainSoundDef *virDomainSoundDefPtr; + +typedef struct _virDomainVideoDef virDomainVideoDef; +typedef virDomainVideoDef *virDomainVideoDefPtr; + +typedef struct _virDomainHostdevDef virDomainHostdevDef; +typedef virDomainHostdevDef *virDomainHostdevDefPtr; + +typedef struct _virDomainWatchdogDef virDomainWatchdogDef; +typedef virDomainWatchdogDef *virDomainWatchdogDefPtr; + +typedef struct _virDomainGraphicsDef virDomainGraphicsDef; +typedef virDomainGraphicsDef *virDomainGraphicsDefPtr; + +typedef struct _virDomainHubDef virDomainHubDef; +typedef virDomainHubDef *virDomainHubDefPtr; + +typedef struct _virDomainRedirdevDef virDomainRedirdevDef; +typedef virDomainRedirdevDef *virDomainRedirdevDefPtr; + +typedef struct _virDomainRedirFilterUSBDevDef virDomainRedirFilterUSBDevDe= f; +typedef virDomainRedirFilterUSBDevDef *virDomainRedirFilterUSBDevDefPtr; + +typedef struct _virDomainRedirFilterDef virDomainRedirFilterDef; +typedef virDomainRedirFilterDef *virDomainRedirFilterDefPtr; + +typedef struct _virDomainSmartcardDef virDomainSmartcardDef; +typedef virDomainSmartcardDef *virDomainSmartcardDefPtr; + +typedef struct _virDomainChrDef virDomainChrDef; +typedef virDomainChrDef *virDomainChrDefPtr; + +typedef struct _virDomainMemballoonDef virDomainMemballoonDef; +typedef virDomainMemballoonDef *virDomainMemballoonDefPtr; + +typedef struct _virDomainNVRAMDef virDomainNVRAMDef; +typedef virDomainNVRAMDef *virDomainNVRAMDefPtr; + +typedef struct _virDomainSnapshotObj virDomainSnapshotObj; +typedef virDomainSnapshotObj *virDomainSnapshotObjPtr; + +typedef struct _virDomainSnapshotObjList virDomainSnapshotObjList; +typedef virDomainSnapshotObjList *virDomainSnapshotObjListPtr; + +typedef struct _virDomainRNGDef virDomainRNGDef; +typedef virDomainRNGDef *virDomainRNGDefPtr; + +typedef struct _virDomainIdMapEntry virDomainIdMapEntry; +typedef virDomainIdMapEntry *virDomainIdMapEntryPtr; + +typedef struct _virDomainIdMapDef virDomainIdMapDef; +typedef virDomainIdMapDef *virDomainIdMapDefPtr; + +typedef struct _virDomainPanicDef virDomainPanicDef; +typedef virDomainPanicDef *virDomainPanicDefPtr; + +typedef struct _virDomainMemoryDef virDomainMemoryDef; +typedef virDomainMemoryDef *virDomainMemoryDefPtr; + +typedef struct _virDomainChrSourceDef virDomainChrSourceDef; +typedef virDomainChrSourceDef *virDomainChrSourceDefPtr; + +typedef struct _virDomainShmemDef virDomainShmemDef; +typedef virDomainShmemDef *virDomainShmemDefPtr; + +typedef struct _virDomainTPMDef virDomainTPMDef; +typedef virDomainTPMDef *virDomainTPMDefPtr; + +typedef struct _virDomainIOMMUDef virDomainIOMMUDef; +typedef virDomainIOMMUDef *virDomainIOMMUDefPtr; + +typedef struct _virDomainVsockDef virDomainVsockDef; +typedef virDomainVsockDef *virDomainVsockDefPtr; + +typedef struct _virDomainVirtioOptions virDomainVirtioOptions; +typedef virDomainVirtioOptions *virDomainVirtioOptionsPtr; + +typedef struct _virDomainDeviceDef virDomainDeviceDef; +typedef virDomainDeviceDef *virDomainDeviceDefPtr; + +typedef struct _virDomainHostdevOrigStates virDomainHostdevOrigStates; +typedef virDomainHostdevOrigStates *virDomainHostdevOrigStatesPtr; + +typedef struct _virDomainHostdevSubsysUSB virDomainHostdevSubsysUSB; +typedef virDomainHostdevSubsysUSB *virDomainHostdevSubsysUSBPtr; + +typedef struct _virDomainHostdevSubsysPCI virDomainHostdevSubsysPCI; +typedef virDomainHostdevSubsysPCI *virDomainHostdevSubsysPCIPtr; + +typedef struct _virDomainHostdevSubsysSCSIHost virDomainHostdevSubsysSCSIH= ost; +typedef virDomainHostdevSubsysSCSIHost *virDomainHostdevSubsysSCSIHostPtr; + +typedef struct _virDomainHostdevSubsysSCSIiSCSI virDomainHostdevSubsysSCSI= iSCSI; +typedef virDomainHostdevSubsysSCSIiSCSI *virDomainHostdevSubsysSCSIiSCSIPt= r; + +typedef struct _virDomainHostdevSubsysSCSI virDomainHostdevSubsysSCSI; +typedef virDomainHostdevSubsysSCSI *virDomainHostdevSubsysSCSIPtr; + +typedef struct _virDomainHostdevSubsysMediatedDev virDomainHostdevSubsysMe= diatedDev; +typedef virDomainHostdevSubsysMediatedDev *virDomainHostdevSubsysMediatedD= evPtr; + +typedef struct _virDomainHostdevSubsysSCSIVHost virDomainHostdevSubsysSCSI= VHost; +typedef virDomainHostdevSubsysSCSIVHost *virDomainHostdevSubsysSCSIVHostPt= r; + +typedef struct _virDomainHostdevSubsys virDomainHostdevSubsys; +typedef virDomainHostdevSubsys *virDomainHostdevSubsysPtr; + +typedef struct _virDomainHostdevCaps virDomainHostdevCaps; +typedef virDomainHostdevCaps *virDomainHostdevCapsPtr; + +typedef struct _virDomainBlockIoTuneInfo virDomainBlockIoTuneInfo; +typedef virDomainBlockIoTuneInfo *virDomainBlockIoTuneInfoPtr; + +typedef struct _virDomainVirtioSerialOpts virDomainVirtioSerialOpts; +typedef virDomainVirtioSerialOpts *virDomainVirtioSerialOptsPtr; + +typedef struct _virDomainPCIControllerOpts virDomainPCIControllerOpts; +typedef virDomainPCIControllerOpts *virDomainPCIControllerOptsPtr; + +typedef struct _virDomainUSBControllerOpts virDomainUSBControllerOpts; +typedef virDomainUSBControllerOpts *virDomainUSBControllerOptsPtr; + +typedef struct _virDomainXenbusControllerOpts virDomainXenbusControllerOpt= s; +typedef virDomainXenbusControllerOpts *virDomainXenbusControllerOptsPtr; + +typedef struct _virDomainActualNetDef virDomainActualNetDef; +typedef virDomainActualNetDef *virDomainActualNetDefPtr; + +typedef struct _virDomainChrSourceReconnectDef virDomainChrSourceReconnect= Def; +typedef virDomainChrSourceReconnectDef *virDomainChrSourceReconnectDefPtr; + +typedef struct _virDomainVideoAccelDef virDomainVideoAccelDef; +typedef virDomainVideoAccelDef *virDomainVideoAccelDefPtr; + +typedef struct _virDomainVideoDriverDef virDomainVideoDriverDef; +typedef virDomainVideoDriverDef *virDomainVideoDriverDefPtr; + +typedef struct _virDomainGraphicsAuthDef virDomainGraphicsAuthDef; +typedef virDomainGraphicsAuthDef *virDomainGraphicsAuthDefPtr; + +typedef struct _virDomainGraphicsListenDef virDomainGraphicsListenDef; +typedef virDomainGraphicsListenDef *virDomainGraphicsListenDefPtr; + +typedef struct _virDomainBIOSDef virDomainBIOSDef; +typedef virDomainBIOSDef *virDomainBIOSDefPtr; + +typedef struct _virDomainLoaderDef virDomainLoaderDef; +typedef virDomainLoaderDef *virDomainLoaderDefPtr; + +typedef struct _virDomainOSEnv virDomainOSEnv; +typedef virDomainOSEnv *virDomainOSEnvPtr; + +typedef struct _virDomainOSDef virDomainOSDef; +typedef virDomainOSDef *virDomainOSDefPtr; + +typedef struct _virDomainThreadSchedParam virDomainThreadSchedParam; +typedef virDomainThreadSchedParam *virDomainThreadSchedParamPtr; + +typedef struct _virDomainTimerCatchupDef virDomainTimerCatchupDef; +typedef virDomainTimerCatchupDef *virDomainTimerCatchupDefPtr; + +typedef struct _virDomainTimerDef virDomainTimerDef; +typedef virDomainTimerDef *virDomainTimerDefPtr; + +typedef struct _virDomainClockDef virDomainClockDef; +typedef virDomainClockDef *virDomainClockDefPtr; + +typedef struct _virBlkioDevice virBlkioDevice; +typedef virBlkioDevice *virBlkioDevicePtr; + +typedef struct _virDomainResourceDef virDomainResourceDef; +typedef virDomainResourceDef *virDomainResourceDefPtr; + +typedef struct _virDomainHugePage virDomainHugePage; +typedef virDomainHugePage *virDomainHugePagePtr; + +typedef struct _virDomainIOThreadIDDef virDomainIOThreadIDDef; +typedef virDomainIOThreadIDDef *virDomainIOThreadIDDefPtr; + +typedef struct _virDomainCputune virDomainCputune; +typedef virDomainCputune *virDomainCputunePtr; + +typedef struct _virDomainResctrlMonDef virDomainResctrlMonDef; +typedef virDomainResctrlMonDef *virDomainResctrlMonDefPtr; + +typedef struct _virDomainResctrlDef virDomainResctrlDef; +typedef virDomainResctrlDef *virDomainResctrlDefPtr; + +typedef struct _virDomainVcpuDef virDomainVcpuDef; +typedef virDomainVcpuDef *virDomainVcpuDefPtr; + +typedef struct _virDomainBlkiotune virDomainBlkiotune; +typedef virDomainBlkiotune *virDomainBlkiotunePtr; + +typedef struct _virDomainMemtune virDomainMemtune; +typedef virDomainMemtune *virDomainMemtunePtr; + +typedef struct _virDomainPowerManagement virDomainPowerManagement; +typedef virDomainPowerManagement *virDomainPowerManagementPtr; + +typedef struct _virDomainPerfDef virDomainPerfDef; +typedef virDomainPerfDef *virDomainPerfDefPtr; + +typedef struct _virDomainKeyWrapDef virDomainKeyWrapDef; +typedef virDomainKeyWrapDef *virDomainKeyWrapDefPtr; + +typedef struct _virDomainSEVDef virDomainSEVDef; +typedef virDomainSEVDef *virDomainSEVDefPtr; + +typedef struct _virDomainDef virDomainDef; +typedef virDomainDef *virDomainDefPtr; + +typedef struct _virDomainObj virDomainObj; +typedef virDomainObj *virDomainObjPtr; + +typedef struct _virDomainXMLOption virDomainXMLOption; +typedef virDomainXMLOption *virDomainXMLOptionPtr; + +typedef struct _virDomainDefParserConfig virDomainDefParserConfig; +typedef virDomainDefParserConfig *virDomainDefParserConfigPtr; + +typedef struct _virDomainXMLPrivateDataCallbacks virDomainXMLPrivateDataCa= llbacks; +typedef virDomainXMLPrivateDataCallbacks *virDomainXMLPrivateDataCallbacks= Ptr; + +typedef struct _virDomainABIStability virDomainABIStability; +typedef virDomainABIStability *virDomainABIStabilityPtr; + +#endif /* LIBVIRT_VIRCONFTYPES_H */ diff --git a/src/conf/Makefile.inc.am b/src/conf/Makefile.inc.am index fb2ec0e785..64d4436c6b 100644 --- a/src/conf/Makefile.inc.am +++ b/src/conf/Makefile.inc.am @@ -26,6 +26,7 @@ DOMAIN_CONF_SOURCES =3D \ conf/snapshot_conf.h \ conf/numa_conf.c \ conf/numa_conf.h \ + conf/virconftypes.h \ conf/virdomainobjlist.c \ conf/virdomainobjlist.h \ $(NULL) --=20 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri Apr 19 19:50:23 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1552626173909995.6699354804155; Thu, 14 Mar 2019 22:02:53 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DF79A30FE5D5; Fri, 15 Mar 2019 05:02:51 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B8FB31001DDE; Fri, 15 Mar 2019 05:02:51 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 753283FB11; Fri, 15 Mar 2019 05:02:51 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x2F52dqK010757 for ; Fri, 15 Mar 2019 01:02:39 -0400 Received: by smtp.corp.redhat.com (Postfix) id 61B7B5D75D; Fri, 15 Mar 2019 05:02:39 +0000 (UTC) Received: from blue.redhat.com (ovpn-118-35.phx2.redhat.com [10.3.118.35]) by smtp.corp.redhat.com (Postfix) with ESMTP id CD0A25D6A6; Fri, 15 Mar 2019 05:02:38 +0000 (UTC) From: Eric Blake To: libvir-list@redhat.com Date: Fri, 15 Mar 2019 00:02:27 -0500 Message-Id: <20190315050233.10782-3-eblake@redhat.com> In-Reply-To: <20190315050233.10782-1-eblake@redhat.com> References: <20190315050233.10782-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Cc: jtomko@redhat.com, jsnow@redhat.com Subject: [libvirt] [PATCH v6 2/8] snapshot: Sort virconftypes.h X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.47]); Fri, 15 Mar 2019 05:02:52 +0000 (UTC) Content-Type: text/plain; charset="utf-8" It's easier to locate a typedef if they are stored in sorted order; do so mechanically via: $ sed -i '/typedef struct/ {N; N; s/\n//g}' src/conf/virconftypes.h $ # sorting the lines $ sed -i '/typedef struct/ s/;/;\n/g' src/conf/virconftypes.h Signed-off-by: Eric Blake Reviewed-by: J=C3=A1n Tomko --- src/conf/virconftypes.h | 340 ++++++++++++++++++++-------------------- 1 file changed, 170 insertions(+), 170 deletions(-) diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h index 0e0dc3da03..c4896ff769 100644 --- a/src/conf/virconftypes.h +++ b/src/conf/virconftypes.h @@ -26,183 +26,210 @@ /* forward declarations of various types required in src/conf */ -typedef struct _virDomainDiskDef virDomainDiskDef; -typedef virDomainDiskDef *virDomainDiskDefPtr; +typedef struct _virBlkioDevice virBlkioDevice; +typedef virBlkioDevice *virBlkioDevicePtr; -typedef struct _virDomainControllerDef virDomainControllerDef; -typedef virDomainControllerDef *virDomainControllerDefPtr; +typedef struct _virDomainABIStability virDomainABIStability; +typedef virDomainABIStability *virDomainABIStabilityPtr; -typedef struct _virDomainLeaseDef virDomainLeaseDef; -typedef virDomainLeaseDef *virDomainLeaseDefPtr; +typedef struct _virDomainActualNetDef virDomainActualNetDef; +typedef virDomainActualNetDef *virDomainActualNetDefPtr; -typedef struct _virDomainFSDef virDomainFSDef; -typedef virDomainFSDef *virDomainFSDefPtr; +typedef struct _virDomainBIOSDef virDomainBIOSDef; +typedef virDomainBIOSDef *virDomainBIOSDefPtr; -typedef struct _virDomainNetDef virDomainNetDef; -typedef virDomainNetDef *virDomainNetDefPtr; +typedef struct _virDomainBlkiotune virDomainBlkiotune; +typedef virDomainBlkiotune *virDomainBlkiotunePtr; -typedef struct _virDomainInputDef virDomainInputDef; -typedef virDomainInputDef *virDomainInputDefPtr; - -typedef struct _virDomainSoundCodecDef virDomainSoundCodecDef; -typedef virDomainSoundCodecDef *virDomainSoundCodecDefPtr; - -typedef struct _virDomainSoundDef virDomainSoundDef; -typedef virDomainSoundDef *virDomainSoundDefPtr; - -typedef struct _virDomainVideoDef virDomainVideoDef; -typedef virDomainVideoDef *virDomainVideoDefPtr; - -typedef struct _virDomainHostdevDef virDomainHostdevDef; -typedef virDomainHostdevDef *virDomainHostdevDefPtr; - -typedef struct _virDomainWatchdogDef virDomainWatchdogDef; -typedef virDomainWatchdogDef *virDomainWatchdogDefPtr; - -typedef struct _virDomainGraphicsDef virDomainGraphicsDef; -typedef virDomainGraphicsDef *virDomainGraphicsDefPtr; - -typedef struct _virDomainHubDef virDomainHubDef; -typedef virDomainHubDef *virDomainHubDefPtr; - -typedef struct _virDomainRedirdevDef virDomainRedirdevDef; -typedef virDomainRedirdevDef *virDomainRedirdevDefPtr; - -typedef struct _virDomainRedirFilterUSBDevDef virDomainRedirFilterUSBDevDe= f; -typedef virDomainRedirFilterUSBDevDef *virDomainRedirFilterUSBDevDefPtr; - -typedef struct _virDomainRedirFilterDef virDomainRedirFilterDef; -typedef virDomainRedirFilterDef *virDomainRedirFilterDefPtr; - -typedef struct _virDomainSmartcardDef virDomainSmartcardDef; -typedef virDomainSmartcardDef *virDomainSmartcardDefPtr; +typedef struct _virDomainBlockIoTuneInfo virDomainBlockIoTuneInfo; +typedef virDomainBlockIoTuneInfo *virDomainBlockIoTuneInfoPtr; typedef struct _virDomainChrDef virDomainChrDef; typedef virDomainChrDef *virDomainChrDefPtr; -typedef struct _virDomainMemballoonDef virDomainMemballoonDef; -typedef virDomainMemballoonDef *virDomainMemballoonDefPtr; - -typedef struct _virDomainNVRAMDef virDomainNVRAMDef; -typedef virDomainNVRAMDef *virDomainNVRAMDefPtr; - -typedef struct _virDomainSnapshotObj virDomainSnapshotObj; -typedef virDomainSnapshotObj *virDomainSnapshotObjPtr; - -typedef struct _virDomainSnapshotObjList virDomainSnapshotObjList; -typedef virDomainSnapshotObjList *virDomainSnapshotObjListPtr; - -typedef struct _virDomainRNGDef virDomainRNGDef; -typedef virDomainRNGDef *virDomainRNGDefPtr; - -typedef struct _virDomainIdMapEntry virDomainIdMapEntry; -typedef virDomainIdMapEntry *virDomainIdMapEntryPtr; - -typedef struct _virDomainIdMapDef virDomainIdMapDef; -typedef virDomainIdMapDef *virDomainIdMapDefPtr; - -typedef struct _virDomainPanicDef virDomainPanicDef; -typedef virDomainPanicDef *virDomainPanicDefPtr; - -typedef struct _virDomainMemoryDef virDomainMemoryDef; -typedef virDomainMemoryDef *virDomainMemoryDefPtr; - typedef struct _virDomainChrSourceDef virDomainChrSourceDef; typedef virDomainChrSourceDef *virDomainChrSourceDefPtr; -typedef struct _virDomainShmemDef virDomainShmemDef; -typedef virDomainShmemDef *virDomainShmemDefPtr; +typedef struct _virDomainChrSourceReconnectDef virDomainChrSourceReconnect= Def; +typedef virDomainChrSourceReconnectDef *virDomainChrSourceReconnectDefPtr; -typedef struct _virDomainTPMDef virDomainTPMDef; -typedef virDomainTPMDef *virDomainTPMDefPtr; +typedef struct _virDomainClockDef virDomainClockDef; +typedef virDomainClockDef *virDomainClockDefPtr; -typedef struct _virDomainIOMMUDef virDomainIOMMUDef; -typedef virDomainIOMMUDef *virDomainIOMMUDefPtr; +typedef struct _virDomainControllerDef virDomainControllerDef; +typedef virDomainControllerDef *virDomainControllerDefPtr; -typedef struct _virDomainVsockDef virDomainVsockDef; -typedef virDomainVsockDef *virDomainVsockDefPtr; +typedef struct _virDomainCputune virDomainCputune; +typedef virDomainCputune *virDomainCputunePtr; -typedef struct _virDomainVirtioOptions virDomainVirtioOptions; -typedef virDomainVirtioOptions *virDomainVirtioOptionsPtr; +typedef struct _virDomainDef virDomainDef; +typedef virDomainDef *virDomainDefPtr; + +typedef struct _virDomainDefParserConfig virDomainDefParserConfig; +typedef virDomainDefParserConfig *virDomainDefParserConfigPtr; typedef struct _virDomainDeviceDef virDomainDeviceDef; typedef virDomainDeviceDef *virDomainDeviceDefPtr; +typedef struct _virDomainDiskDef virDomainDiskDef; +typedef virDomainDiskDef *virDomainDiskDefPtr; + +typedef struct _virDomainFSDef virDomainFSDef; +typedef virDomainFSDef *virDomainFSDefPtr; + +typedef struct _virDomainGraphicsAuthDef virDomainGraphicsAuthDef; +typedef virDomainGraphicsAuthDef *virDomainGraphicsAuthDefPtr; + +typedef struct _virDomainGraphicsDef virDomainGraphicsDef; +typedef virDomainGraphicsDef *virDomainGraphicsDefPtr; + +typedef struct _virDomainGraphicsListenDef virDomainGraphicsListenDef; +typedef virDomainGraphicsListenDef *virDomainGraphicsListenDefPtr; + +typedef struct _virDomainHostdevCaps virDomainHostdevCaps; +typedef virDomainHostdevCaps *virDomainHostdevCapsPtr; + +typedef struct _virDomainHostdevDef virDomainHostdevDef; +typedef virDomainHostdevDef *virDomainHostdevDefPtr; + typedef struct _virDomainHostdevOrigStates virDomainHostdevOrigStates; typedef virDomainHostdevOrigStates *virDomainHostdevOrigStatesPtr; -typedef struct _virDomainHostdevSubsysUSB virDomainHostdevSubsysUSB; -typedef virDomainHostdevSubsysUSB *virDomainHostdevSubsysUSBPtr; +typedef struct _virDomainHostdevSubsys virDomainHostdevSubsys; +typedef virDomainHostdevSubsys *virDomainHostdevSubsysPtr; + +typedef struct _virDomainHostdevSubsysMediatedDev virDomainHostdevSubsysMe= diatedDev; +typedef virDomainHostdevSubsysMediatedDev *virDomainHostdevSubsysMediatedD= evPtr; typedef struct _virDomainHostdevSubsysPCI virDomainHostdevSubsysPCI; typedef virDomainHostdevSubsysPCI *virDomainHostdevSubsysPCIPtr; -typedef struct _virDomainHostdevSubsysSCSIHost virDomainHostdevSubsysSCSIH= ost; -typedef virDomainHostdevSubsysSCSIHost *virDomainHostdevSubsysSCSIHostPtr; - -typedef struct _virDomainHostdevSubsysSCSIiSCSI virDomainHostdevSubsysSCSI= iSCSI; -typedef virDomainHostdevSubsysSCSIiSCSI *virDomainHostdevSubsysSCSIiSCSIPt= r; - typedef struct _virDomainHostdevSubsysSCSI virDomainHostdevSubsysSCSI; typedef virDomainHostdevSubsysSCSI *virDomainHostdevSubsysSCSIPtr; -typedef struct _virDomainHostdevSubsysMediatedDev virDomainHostdevSubsysMe= diatedDev; -typedef virDomainHostdevSubsysMediatedDev *virDomainHostdevSubsysMediatedD= evPtr; +typedef struct _virDomainHostdevSubsysSCSIHost virDomainHostdevSubsysSCSIH= ost; +typedef virDomainHostdevSubsysSCSIHost *virDomainHostdevSubsysSCSIHostPtr; typedef struct _virDomainHostdevSubsysSCSIVHost virDomainHostdevSubsysSCSI= VHost; typedef virDomainHostdevSubsysSCSIVHost *virDomainHostdevSubsysSCSIVHostPt= r; -typedef struct _virDomainHostdevSubsys virDomainHostdevSubsys; -typedef virDomainHostdevSubsys *virDomainHostdevSubsysPtr; +typedef struct _virDomainHostdevSubsysSCSIiSCSI virDomainHostdevSubsysSCSI= iSCSI; +typedef virDomainHostdevSubsysSCSIiSCSI *virDomainHostdevSubsysSCSIiSCSIPt= r; -typedef struct _virDomainHostdevCaps virDomainHostdevCaps; -typedef virDomainHostdevCaps *virDomainHostdevCapsPtr; +typedef struct _virDomainHostdevSubsysUSB virDomainHostdevSubsysUSB; +typedef virDomainHostdevSubsysUSB *virDomainHostdevSubsysUSBPtr; -typedef struct _virDomainBlockIoTuneInfo virDomainBlockIoTuneInfo; -typedef virDomainBlockIoTuneInfo *virDomainBlockIoTuneInfoPtr; +typedef struct _virDomainHubDef virDomainHubDef; +typedef virDomainHubDef *virDomainHubDefPtr; -typedef struct _virDomainVirtioSerialOpts virDomainVirtioSerialOpts; -typedef virDomainVirtioSerialOpts *virDomainVirtioSerialOptsPtr; +typedef struct _virDomainHugePage virDomainHugePage; +typedef virDomainHugePage *virDomainHugePagePtr; -typedef struct _virDomainPCIControllerOpts virDomainPCIControllerOpts; -typedef virDomainPCIControllerOpts *virDomainPCIControllerOptsPtr; +typedef struct _virDomainIOMMUDef virDomainIOMMUDef; +typedef virDomainIOMMUDef *virDomainIOMMUDefPtr; -typedef struct _virDomainUSBControllerOpts virDomainUSBControllerOpts; -typedef virDomainUSBControllerOpts *virDomainUSBControllerOptsPtr; +typedef struct _virDomainIOThreadIDDef virDomainIOThreadIDDef; +typedef virDomainIOThreadIDDef *virDomainIOThreadIDDefPtr; -typedef struct _virDomainXenbusControllerOpts virDomainXenbusControllerOpt= s; -typedef virDomainXenbusControllerOpts *virDomainXenbusControllerOptsPtr; +typedef struct _virDomainIdMapDef virDomainIdMapDef; +typedef virDomainIdMapDef *virDomainIdMapDefPtr; -typedef struct _virDomainActualNetDef virDomainActualNetDef; -typedef virDomainActualNetDef *virDomainActualNetDefPtr; +typedef struct _virDomainIdMapEntry virDomainIdMapEntry; +typedef virDomainIdMapEntry *virDomainIdMapEntryPtr; -typedef struct _virDomainChrSourceReconnectDef virDomainChrSourceReconnect= Def; -typedef virDomainChrSourceReconnectDef *virDomainChrSourceReconnectDefPtr; +typedef struct _virDomainInputDef virDomainInputDef; +typedef virDomainInputDef *virDomainInputDefPtr; -typedef struct _virDomainVideoAccelDef virDomainVideoAccelDef; -typedef virDomainVideoAccelDef *virDomainVideoAccelDefPtr; +typedef struct _virDomainKeyWrapDef virDomainKeyWrapDef; +typedef virDomainKeyWrapDef *virDomainKeyWrapDefPtr; -typedef struct _virDomainVideoDriverDef virDomainVideoDriverDef; -typedef virDomainVideoDriverDef *virDomainVideoDriverDefPtr; - -typedef struct _virDomainGraphicsAuthDef virDomainGraphicsAuthDef; -typedef virDomainGraphicsAuthDef *virDomainGraphicsAuthDefPtr; - -typedef struct _virDomainGraphicsListenDef virDomainGraphicsListenDef; -typedef virDomainGraphicsListenDef *virDomainGraphicsListenDefPtr; - -typedef struct _virDomainBIOSDef virDomainBIOSDef; -typedef virDomainBIOSDef *virDomainBIOSDefPtr; +typedef struct _virDomainLeaseDef virDomainLeaseDef; +typedef virDomainLeaseDef *virDomainLeaseDefPtr; typedef struct _virDomainLoaderDef virDomainLoaderDef; typedef virDomainLoaderDef *virDomainLoaderDefPtr; -typedef struct _virDomainOSEnv virDomainOSEnv; -typedef virDomainOSEnv *virDomainOSEnvPtr; +typedef struct _virDomainMemballoonDef virDomainMemballoonDef; +typedef virDomainMemballoonDef *virDomainMemballoonDefPtr; + +typedef struct _virDomainMemoryDef virDomainMemoryDef; +typedef virDomainMemoryDef *virDomainMemoryDefPtr; + +typedef struct _virDomainMemtune virDomainMemtune; +typedef virDomainMemtune *virDomainMemtunePtr; + +typedef struct _virDomainNVRAMDef virDomainNVRAMDef; +typedef virDomainNVRAMDef *virDomainNVRAMDefPtr; + +typedef struct _virDomainNetDef virDomainNetDef; +typedef virDomainNetDef *virDomainNetDefPtr; typedef struct _virDomainOSDef virDomainOSDef; typedef virDomainOSDef *virDomainOSDefPtr; +typedef struct _virDomainOSEnv virDomainOSEnv; +typedef virDomainOSEnv *virDomainOSEnvPtr; + +typedef struct _virDomainObj virDomainObj; +typedef virDomainObj *virDomainObjPtr; + +typedef struct _virDomainPCIControllerOpts virDomainPCIControllerOpts; +typedef virDomainPCIControllerOpts *virDomainPCIControllerOptsPtr; + +typedef struct _virDomainPanicDef virDomainPanicDef; +typedef virDomainPanicDef *virDomainPanicDefPtr; + +typedef struct _virDomainPerfDef virDomainPerfDef; +typedef virDomainPerfDef *virDomainPerfDefPtr; + +typedef struct _virDomainPowerManagement virDomainPowerManagement; +typedef virDomainPowerManagement *virDomainPowerManagementPtr; + +typedef struct _virDomainRNGDef virDomainRNGDef; +typedef virDomainRNGDef *virDomainRNGDefPtr; + +typedef struct _virDomainRedirFilterDef virDomainRedirFilterDef; +typedef virDomainRedirFilterDef *virDomainRedirFilterDefPtr; + +typedef struct _virDomainRedirFilterUSBDevDef virDomainRedirFilterUSBDevDe= f; +typedef virDomainRedirFilterUSBDevDef *virDomainRedirFilterUSBDevDefPtr; + +typedef struct _virDomainRedirdevDef virDomainRedirdevDef; +typedef virDomainRedirdevDef *virDomainRedirdevDefPtr; + +typedef struct _virDomainResctrlDef virDomainResctrlDef; +typedef virDomainResctrlDef *virDomainResctrlDefPtr; + +typedef struct _virDomainResctrlMonDef virDomainResctrlMonDef; +typedef virDomainResctrlMonDef *virDomainResctrlMonDefPtr; + +typedef struct _virDomainResourceDef virDomainResourceDef; +typedef virDomainResourceDef *virDomainResourceDefPtr; + +typedef struct _virDomainSEVDef virDomainSEVDef; +typedef virDomainSEVDef *virDomainSEVDefPtr; + +typedef struct _virDomainShmemDef virDomainShmemDef; +typedef virDomainShmemDef *virDomainShmemDefPtr; + +typedef struct _virDomainSmartcardDef virDomainSmartcardDef; +typedef virDomainSmartcardDef *virDomainSmartcardDefPtr; + +typedef struct _virDomainSnapshotObj virDomainSnapshotObj; +typedef virDomainSnapshotObj *virDomainSnapshotObjPtr; + +typedef struct _virDomainSnapshotObjList virDomainSnapshotObjList; +typedef virDomainSnapshotObjList *virDomainSnapshotObjListPtr; + +typedef struct _virDomainSoundCodecDef virDomainSoundCodecDef; +typedef virDomainSoundCodecDef *virDomainSoundCodecDefPtr; + +typedef struct _virDomainSoundDef virDomainSoundDef; +typedef virDomainSoundDef *virDomainSoundDefPtr; + +typedef struct _virDomainTPMDef virDomainTPMDef; +typedef virDomainTPMDef *virDomainTPMDefPtr; + typedef struct _virDomainThreadSchedParam virDomainThreadSchedParam; typedef virDomainThreadSchedParam *virDomainThreadSchedParamPtr; @@ -212,67 +239,40 @@ typedef virDomainTimerCatchupDef *virDomainTimerCatch= upDefPtr; typedef struct _virDomainTimerDef virDomainTimerDef; typedef virDomainTimerDef *virDomainTimerDefPtr; -typedef struct _virDomainClockDef virDomainClockDef; -typedef virDomainClockDef *virDomainClockDefPtr; - -typedef struct _virBlkioDevice virBlkioDevice; -typedef virBlkioDevice *virBlkioDevicePtr; - -typedef struct _virDomainResourceDef virDomainResourceDef; -typedef virDomainResourceDef *virDomainResourceDefPtr; - -typedef struct _virDomainHugePage virDomainHugePage; -typedef virDomainHugePage *virDomainHugePagePtr; - -typedef struct _virDomainIOThreadIDDef virDomainIOThreadIDDef; -typedef virDomainIOThreadIDDef *virDomainIOThreadIDDefPtr; - -typedef struct _virDomainCputune virDomainCputune; -typedef virDomainCputune *virDomainCputunePtr; - -typedef struct _virDomainResctrlMonDef virDomainResctrlMonDef; -typedef virDomainResctrlMonDef *virDomainResctrlMonDefPtr; - -typedef struct _virDomainResctrlDef virDomainResctrlDef; -typedef virDomainResctrlDef *virDomainResctrlDefPtr; +typedef struct _virDomainUSBControllerOpts virDomainUSBControllerOpts; +typedef virDomainUSBControllerOpts *virDomainUSBControllerOptsPtr; typedef struct _virDomainVcpuDef virDomainVcpuDef; typedef virDomainVcpuDef *virDomainVcpuDefPtr; -typedef struct _virDomainBlkiotune virDomainBlkiotune; -typedef virDomainBlkiotune *virDomainBlkiotunePtr; +typedef struct _virDomainVideoAccelDef virDomainVideoAccelDef; +typedef virDomainVideoAccelDef *virDomainVideoAccelDefPtr; -typedef struct _virDomainMemtune virDomainMemtune; -typedef virDomainMemtune *virDomainMemtunePtr; +typedef struct _virDomainVideoDef virDomainVideoDef; +typedef virDomainVideoDef *virDomainVideoDefPtr; -typedef struct _virDomainPowerManagement virDomainPowerManagement; -typedef virDomainPowerManagement *virDomainPowerManagementPtr; +typedef struct _virDomainVideoDriverDef virDomainVideoDriverDef; +typedef virDomainVideoDriverDef *virDomainVideoDriverDefPtr; -typedef struct _virDomainPerfDef virDomainPerfDef; -typedef virDomainPerfDef *virDomainPerfDefPtr; +typedef struct _virDomainVirtioOptions virDomainVirtioOptions; +typedef virDomainVirtioOptions *virDomainVirtioOptionsPtr; -typedef struct _virDomainKeyWrapDef virDomainKeyWrapDef; -typedef virDomainKeyWrapDef *virDomainKeyWrapDefPtr; +typedef struct _virDomainVirtioSerialOpts virDomainVirtioSerialOpts; +typedef virDomainVirtioSerialOpts *virDomainVirtioSerialOptsPtr; -typedef struct _virDomainSEVDef virDomainSEVDef; -typedef virDomainSEVDef *virDomainSEVDefPtr; +typedef struct _virDomainVsockDef virDomainVsockDef; +typedef virDomainVsockDef *virDomainVsockDefPtr; -typedef struct _virDomainDef virDomainDef; -typedef virDomainDef *virDomainDefPtr; - -typedef struct _virDomainObj virDomainObj; -typedef virDomainObj *virDomainObjPtr; +typedef struct _virDomainWatchdogDef virDomainWatchdogDef; +typedef virDomainWatchdogDef *virDomainWatchdogDefPtr; typedef struct _virDomainXMLOption virDomainXMLOption; typedef virDomainXMLOption *virDomainXMLOptionPtr; -typedef struct _virDomainDefParserConfig virDomainDefParserConfig; -typedef virDomainDefParserConfig *virDomainDefParserConfigPtr; - typedef struct _virDomainXMLPrivateDataCallbacks virDomainXMLPrivateDataCa= llbacks; typedef virDomainXMLPrivateDataCallbacks *virDomainXMLPrivateDataCallbacks= Ptr; -typedef struct _virDomainABIStability virDomainABIStability; -typedef virDomainABIStability *virDomainABIStabilityPtr; +typedef struct _virDomainXenbusControllerOpts virDomainXenbusControllerOpt= s; +typedef virDomainXenbusControllerOpts *virDomainXenbusControllerOptsPtr; #endif /* LIBVIRT_VIRCONFTYPES_H */ --=20 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri Apr 19 19:50:23 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1552626176830762.5191560159133; Thu, 14 Mar 2019 22:02:56 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3C0853070263; Fri, 15 Mar 2019 05:02:55 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1525860FE5; Fri, 15 Mar 2019 05:02:55 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id CF9B2181A265; Fri, 15 Mar 2019 05:02:54 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x2F52eZU010765 for ; Fri, 15 Mar 2019 01:02:40 -0400 Received: by smtp.corp.redhat.com (Postfix) id 149BE5D75E; Fri, 15 Mar 2019 05:02:40 +0000 (UTC) Received: from blue.redhat.com (ovpn-118-35.phx2.redhat.com [10.3.118.35]) by smtp.corp.redhat.com (Postfix) with ESMTP id 839555D6A6; Fri, 15 Mar 2019 05:02:39 +0000 (UTC) From: Eric Blake To: libvir-list@redhat.com Date: Fri, 15 Mar 2019 00:02:28 -0500 Message-Id: <20190315050233.10782-4-eblake@redhat.com> In-Reply-To: <20190315050233.10782-1-eblake@redhat.com> References: <20190315050233.10782-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Cc: jtomko@redhat.com, jsnow@redhat.com Subject: [libvirt] [PATCH v6 3/8] snapshot: Break out virDomainSnapshotObj into its own file X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Fri, 15 Mar 2019 05:02:55 +0000 (UTC) Content-Type: text/plain; charset="utf-8" snapshot_conf.h was mixing three separate types: the snapshot definition, the snapshot object, and the snapshot object list. Separate out the snapshot object code into its own file, which includes moving a typedef to avoid circular inclusions. Mostly straight code motion, although I fixed a comment along the way. Signed-off-by: Eric Blake Reviewed-by: J=C3=A1n Tomko --- src/conf/snapshot_conf.h | 20 +----- src/conf/virconftypes.h | 3 + src/conf/virdomainsnapshotobj.h | 50 +++++++++++++ src/conf/Makefile.inc.am | 2 + src/conf/snapshot_conf.c | 85 ---------------------- src/conf/virdomainsnapshotobj.c | 122 ++++++++++++++++++++++++++++++++ src/libvirt_private.syms | 9 ++- 7 files changed, 184 insertions(+), 107 deletions(-) create mode 100644 src/conf/virdomainsnapshotobj.h create mode 100644 src/conf/virdomainsnapshotobj.c diff --git a/src/conf/snapshot_conf.h b/src/conf/snapshot_conf.h index 6d79dbb0da..444de05a71 100644 --- a/src/conf/snapshot_conf.h +++ b/src/conf/snapshot_conf.h @@ -24,6 +24,7 @@ # include "internal.h" # include "domain_conf.h" +# include "virdomainsnapshotobj.h" /* Items related to snapshot state */ @@ -71,8 +72,6 @@ struct _virDomainSnapshotDiskDef { }; /* Stores the complete snapshot metadata */ -typedef struct _virDomainSnapshotDef virDomainSnapshotDef; -typedef virDomainSnapshotDef *virDomainSnapshotDefPtr; struct _virDomainSnapshotDef { /* Public XML. */ char *name; @@ -95,16 +94,6 @@ struct _virDomainSnapshotDef { bool current; /* At most one snapshot in the list should have this set= */ }; -struct _virDomainSnapshotObj { - virDomainSnapshotDefPtr def; /* non-NULL except for metaroot */ - - virDomainSnapshotObjPtr parent; /* non-NULL except for metaroot, before - virDomainSnapshotUpdateRelations, or - after virDomainSnapshotDropParent */ - virDomainSnapshotObjPtr sibling; /* NULL if last child of parent */ - size_t nchildren; - virDomainSnapshotObjPtr first_child; /* NULL if no children */ -}; virDomainSnapshotObjListPtr virDomainSnapshotObjListNew(void); void virDomainSnapshotObjListFree(virDomainSnapshotObjListPtr snapshots); @@ -172,14 +161,7 @@ void virDomainSnapshotObjListRemove(virDomainSnapshotO= bjListPtr snapshots, int virDomainSnapshotForEach(virDomainSnapshotObjListPtr snapshots, virHashIterator iter, void *data); -int virDomainSnapshotForEachChild(virDomainSnapshotObjPtr snapshot, - virHashIterator iter, - void *data); -int virDomainSnapshotForEachDescendant(virDomainSnapshotObjPtr snapshot, - virHashIterator iter, - void *data); int virDomainSnapshotUpdateRelations(virDomainSnapshotObjListPtr snapshots= ); -void virDomainSnapshotDropParent(virDomainSnapshotObjPtr snapshot); # define VIR_DOMAIN_SNAPSHOT_FILTERS_METADATA \ (VIR_DOMAIN_SNAPSHOT_LIST_METADATA | \ diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h index c4896ff769..a271c4e7f7 100644 --- a/src/conf/virconftypes.h +++ b/src/conf/virconftypes.h @@ -215,6 +215,9 @@ typedef virDomainShmemDef *virDomainShmemDefPtr; typedef struct _virDomainSmartcardDef virDomainSmartcardDef; typedef virDomainSmartcardDef *virDomainSmartcardDefPtr; +typedef struct _virDomainSnapshotDef virDomainSnapshotDef; +typedef virDomainSnapshotDef *virDomainSnapshotDefPtr; + typedef struct _virDomainSnapshotObj virDomainSnapshotObj; typedef virDomainSnapshotObj *virDomainSnapshotObjPtr; diff --git a/src/conf/virdomainsnapshotobj.h b/src/conf/virdomainsnapshotob= j.h new file mode 100644 index 0000000000..957f1b2ea8 --- /dev/null +++ b/src/conf/virdomainsnapshotobj.h @@ -0,0 +1,50 @@ +/* + * virdomainsnapshotobj.h: handle snapshot objects + * (derived from snapshot_conf.h) + * + * Copyright (C) 2006-2019 Red Hat, Inc. + * Copyright (C) 2006-2008 Daniel P. Berrange + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#ifndef LIBVIRT_VIRDOMAINSNAPSHOTOBJ_H +# define LIBVIRT_VIRDOMAINSNAPSHOTOBJ_H + +# include "internal.h" +# include "virconftypes.h" +# include "virhash.h" + +struct _virDomainSnapshotObj { + virDomainSnapshotDefPtr def; /* non-NULL except for metaroot */ + + virDomainSnapshotObjPtr parent; /* non-NULL except for metaroot, before + virDomainSnapshotUpdateRelations, or + after virDomainSnapshotDropParent */ + virDomainSnapshotObjPtr sibling; /* NULL if last child of parent */ + size_t nchildren; + virDomainSnapshotObjPtr first_child; /* NULL if no children */ +}; + + +int virDomainSnapshotForEachChild(virDomainSnapshotObjPtr snapshot, + virHashIterator iter, + void *data); +int virDomainSnapshotForEachDescendant(virDomainSnapshotObjPtr snapshot, + virHashIterator iter, + void *data); +void virDomainSnapshotDropParent(virDomainSnapshotObjPtr snapshot); + +#endif /* LIBVIRT_VIRDOMAINSNAPSHOTOBJ_H */ diff --git a/src/conf/Makefile.inc.am b/src/conf/Makefile.inc.am index 64d4436c6b..be941ee7e2 100644 --- a/src/conf/Makefile.inc.am +++ b/src/conf/Makefile.inc.am @@ -29,6 +29,8 @@ DOMAIN_CONF_SOURCES =3D \ conf/virconftypes.h \ conf/virdomainobjlist.c \ conf/virdomainobjlist.h \ + conf/virdomainsnapshotobj.c \ + conf/virdomainsnapshotobj.h \ $(NULL) OBJECT_EVENT_SOURCES =3D \ diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c index e2c91a5072..3b0e527bb2 100644 --- a/src/conf/snapshot_conf.c +++ b/src/conf/snapshot_conf.c @@ -1299,64 +1299,6 @@ virDomainSnapshotForEach(virDomainSnapshotObjListPtr= snapshots, return virHashForEach(snapshots->objs, iter, data); } -/* Run iter(data) on all direct children of snapshot, while ignoring all - * other entries in snapshots. Return the number of children - * visited. No particular ordering is guaranteed. */ -int -virDomainSnapshotForEachChild(virDomainSnapshotObjPtr snapshot, - virHashIterator iter, - void *data) -{ - virDomainSnapshotObjPtr child =3D snapshot->first_child; - - while (child) { - virDomainSnapshotObjPtr next =3D child->sibling; - (iter)(child, child->def->name, data); - child =3D next; - } - - return snapshot->nchildren; -} - -struct snapshot_act_on_descendant { - int number; - virHashIterator iter; - void *data; -}; - -static int -virDomainSnapshotActOnDescendant(void *payload, - const void *name, - void *data) -{ - virDomainSnapshotObjPtr obj =3D payload; - struct snapshot_act_on_descendant *curr =3D data; - - (curr->iter)(payload, name, curr->data); - curr->number +=3D 1 + virDomainSnapshotForEachDescendant(obj, - curr->iter, - curr->data); - return 0; -} - -/* Run iter(data) on all descendants of snapshot, while ignoring all - * other entries in snapshots. Return the number of descendants - * visited. No particular ordering is guaranteed. */ -int -virDomainSnapshotForEachDescendant(virDomainSnapshotObjPtr snapshot, - virHashIterator iter, - void *data) -{ - struct snapshot_act_on_descendant act; - - act.number =3D 0; - act.iter =3D iter; - act.data =3D data; - virDomainSnapshotForEachChild(snapshot, - virDomainSnapshotActOnDescendant, &act); - - return act.number; -} /* Struct and callback function used as a hash table callback; each call * inspects the pre-existing snapshot->def->parent field, and adjusts @@ -1416,33 +1358,6 @@ virDomainSnapshotUpdateRelations(virDomainSnapshotOb= jListPtr snapshots) return act.err; } -/* Prepare to reparent or delete snapshot, by removing it from its - * current listed parent. Note that when bulk removing all children - * of a parent, it is faster to just 0 the count rather than calling - * this function on each child. */ -void -virDomainSnapshotDropParent(virDomainSnapshotObjPtr snapshot) -{ - virDomainSnapshotObjPtr prev =3D NULL; - virDomainSnapshotObjPtr curr =3D NULL; - - snapshot->parent->nchildren--; - curr =3D snapshot->parent->first_child; - while (curr !=3D snapshot) { - if (!curr) { - VIR_WARN("inconsistent snapshot relations"); - return; - } - prev =3D curr; - curr =3D curr->sibling; - } - if (prev) - prev->sibling =3D snapshot->sibling; - else - snapshot->parent->first_child =3D snapshot->sibling; - snapshot->parent =3D NULL; - snapshot->sibling =3D NULL; -} int virDomainListSnapshots(virDomainSnapshotObjListPtr snapshots, diff --git a/src/conf/virdomainsnapshotobj.c b/src/conf/virdomainsnapshotob= j.c new file mode 100644 index 0000000000..487f0cc702 --- /dev/null +++ b/src/conf/virdomainsnapshotobj.c @@ -0,0 +1,122 @@ +/* + * virdomainsnapshotobj.c: handle snapshot objects + * (derived from snapshot_conf.c) + * + * Copyright (C) 2006-2019 Red Hat, Inc. + * Copyright (C) 2006-2008 Daniel P. Berrange + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#include + +#include "internal.h" +#include "virdomainsnapshotobj.h" +#include "snapshot_conf.h" +#include "virlog.h" +#include "virerror.h" + +#define VIR_FROM_THIS VIR_FROM_DOMAIN_SNAPSHOT + +VIR_LOG_INIT("conf.virdomainsnapshotobj"); + +/* Run iter(data) on all direct children of snapshot, while ignoring all + * other entries in snapshots. Return the number of children + * visited. No particular ordering is guaranteed. */ +int +virDomainSnapshotForEachChild(virDomainSnapshotObjPtr snapshot, + virHashIterator iter, + void *data) +{ + virDomainSnapshotObjPtr child =3D snapshot->first_child; + + while (child) { + virDomainSnapshotObjPtr next =3D child->sibling; + (iter)(child, child->def->name, data); + child =3D next; + } + + return snapshot->nchildren; +} + +struct snapshot_act_on_descendant { + int number; + virHashIterator iter; + void *data; +}; + +static int +virDomainSnapshotActOnDescendant(void *payload, + const void *name, + void *data) +{ + virDomainSnapshotObjPtr obj =3D payload; + struct snapshot_act_on_descendant *curr =3D data; + + (curr->iter)(payload, name, curr->data); + curr->number +=3D 1 + virDomainSnapshotForEachDescendant(obj, + curr->iter, + curr->data); + return 0; +} + +/* Run iter(data) on all descendants of snapshot, while ignoring all + * other entries in snapshots. Return the number of descendants + * visited. The visit is guaranteed to be topological, but no + * particular order between siblings is guaranteed. */ +int +virDomainSnapshotForEachDescendant(virDomainSnapshotObjPtr snapshot, + virHashIterator iter, + void *data) +{ + struct snapshot_act_on_descendant act; + + act.number =3D 0; + act.iter =3D iter; + act.data =3D data; + virDomainSnapshotForEachChild(snapshot, + virDomainSnapshotActOnDescendant, &act); + + return act.number; +} + + +/* Prepare to reparent or delete snapshot, by removing it from its + * current listed parent. Note that when bulk removing all children + * of a parent, it is faster to just 0 the count rather than calling + * this function on each child. */ +void +virDomainSnapshotDropParent(virDomainSnapshotObjPtr snapshot) +{ + virDomainSnapshotObjPtr prev =3D NULL; + virDomainSnapshotObjPtr curr =3D NULL; + + snapshot->parent->nchildren--; + curr =3D snapshot->parent->first_child; + while (curr !=3D snapshot) { + if (!curr) { + VIR_WARN("inconsistent snapshot relations"); + return; + } + prev =3D curr; + curr =3D curr->sibling; + } + if (prev) + prev->sibling =3D snapshot->sibling; + else + snapshot->parent->first_child =3D snapshot->sibling; + snapshot->parent =3D NULL; + snapshot->sibling =3D NULL; +} diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 9582b72262..d775fe8551 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -890,11 +890,8 @@ virDomainSnapshotDefFormat; virDomainSnapshotDefFree; virDomainSnapshotDefIsExternal; virDomainSnapshotDefParseString; -virDomainSnapshotDropParent; virDomainSnapshotFindByName; virDomainSnapshotForEach; -virDomainSnapshotForEachChild; -virDomainSnapshotForEachDescendant; virDomainSnapshotFormatConvertXMLFlags; virDomainSnapshotIsExternal; virDomainSnapshotLocationTypeFromString; @@ -992,6 +989,12 @@ virDomainObjListRemoveLocked; virDomainObjListRename; +# conf/virdomainsnapshotobj.h +virDomainSnapshotDropParent; +virDomainSnapshotForEachChild; +virDomainSnapshotForEachDescendant; + + # conf/virinterfaceobj.h virInterfaceObjEndAPI; virInterfaceObjGetDef; --=20 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri Apr 19 19:50:23 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1552626180447845.7300265458342; Thu, 14 Mar 2019 22:03:00 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9E79E3003ADC; Fri, 15 Mar 2019 05:02:58 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 7611D5ED38; Fri, 15 Mar 2019 05:02:58 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 2955A181A268; Fri, 15 Mar 2019 05:02:58 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x2F52erG010772 for ; Fri, 15 Mar 2019 01:02:40 -0400 Received: by smtp.corp.redhat.com (Postfix) id BCAC85D73D; Fri, 15 Mar 2019 05:02:40 +0000 (UTC) Received: from blue.redhat.com (ovpn-118-35.phx2.redhat.com [10.3.118.35]) by smtp.corp.redhat.com (Postfix) with ESMTP id 38A8B5D6A6; Fri, 15 Mar 2019 05:02:40 +0000 (UTC) From: Eric Blake To: libvir-list@redhat.com Date: Fri, 15 Mar 2019 00:02:29 -0500 Message-Id: <20190315050233.10782-5-eblake@redhat.com> In-Reply-To: <20190315050233.10782-1-eblake@redhat.com> References: <20190315050233.10782-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Cc: jtomko@redhat.com, jsnow@redhat.com Subject: [libvirt] [PATCH v6 4/8] snapshot: Export two functions prior to file split X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Fri, 15 Mar 2019 05:02:59 +0000 (UTC) Content-Type: text/plain; charset="utf-8" The next patch will require access to the helper functions virDomainSnapshotDefFormatInternal and virDomainSnapshotRedefineValidate from two different files; make the file split easier by exporting these functions. Signed-off-by: Eric Blake Reviewed-by: J=C3=A1n Tomko --- src/conf/snapshot_conf.h | 13 +++++++++++++ src/conf/snapshot_conf.c | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/conf/snapshot_conf.h b/src/conf/snapshot_conf.h index 444de05a71..c816ad06e1 100644 --- a/src/conf/snapshot_conf.h +++ b/src/conf/snapshot_conf.h @@ -134,6 +134,13 @@ char *virDomainSnapshotDefFormat(const char *uuidstr, virCapsPtr caps, virDomainXMLOptionPtr xmlopt, unsigned int flags); +int virDomainSnapshotDefFormatInternal(virBufferPtr buf, + const char *uuidstr, + virDomainSnapshotDefPtr def, + virCapsPtr caps, + virDomainXMLOptionPtr xmlopt, + unsigned int flags); + int virDomainSnapshotObjListFormat(virBufferPtr buf, const char *uuidstr, virDomainSnapshotObjListPtr snapshots, @@ -203,6 +210,12 @@ int virDomainSnapshotRedefinePrep(virDomainPtr domain, bool *update_current, unsigned int flags); +int virDomainSnapshotRedefineValidate(virDomainSnapshotDefPtr def, + const unsigned char *domain_uuid, + virDomainSnapshotObjPtr other, + virDomainXMLOptionPtr xmlopt, + unsigned int flags); + VIR_ENUM_DECL(virDomainSnapshotLocation); VIR_ENUM_DECL(virDomainSnapshotState); diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c index 3b0e527bb2..560150977b 100644 --- a/src/conf/snapshot_conf.c +++ b/src/conf/snapshot_conf.c @@ -429,7 +429,7 @@ virDomainSnapshotDefParseString(const char *xmlStr, /* Perform sanity checking on a redefined snapshot definition. If * @other is non-NULL, this may include swapping def->dom from other * into def. */ -static int +int virDomainSnapshotRedefineValidate(virDomainSnapshotDefPtr def, const unsigned char *domain_uuid, virDomainSnapshotObjPtr other, @@ -896,7 +896,7 @@ virDomainSnapshotDiskDefFormat(virBufferPtr buf, /* Append XML describing def into buf. Return 0 on success, or -1 on * failure with buf cleared. */ -static int +int virDomainSnapshotDefFormatInternal(virBufferPtr buf, const char *uuidstr, virDomainSnapshotDefPtr def, --=20 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri Apr 19 19:50:23 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1552626169030484.17486219321654; Thu, 14 Mar 2019 22:02:49 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 402E931587B0; Fri, 15 Mar 2019 05:02:47 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1CABB60BE6; Fri, 15 Mar 2019 05:02:47 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id D075D41F3D; Fri, 15 Mar 2019 05:02:46 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x2F52fcu010778 for ; Fri, 15 Mar 2019 01:02:41 -0400 Received: by smtp.corp.redhat.com (Postfix) id 9846B5D75D; Fri, 15 Mar 2019 05:02:41 +0000 (UTC) Received: from blue.redhat.com (ovpn-118-35.phx2.redhat.com [10.3.118.35]) by smtp.corp.redhat.com (Postfix) with ESMTP id DF6375D6A6; Fri, 15 Mar 2019 05:02:40 +0000 (UTC) From: Eric Blake To: libvir-list@redhat.com Date: Fri, 15 Mar 2019 00:02:30 -0500 Message-Id: <20190315050233.10782-6-eblake@redhat.com> In-Reply-To: <20190315050233.10782-1-eblake@redhat.com> References: <20190315050233.10782-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Cc: jtomko@redhat.com, jsnow@redhat.com Subject: [libvirt] [PATCH v6 5/8] snapshot: Break out virDomainSnapshotObjList into its own file X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.41]); Fri, 15 Mar 2019 05:02:47 +0000 (UTC) Content-Type: text/plain; charset="utf-8" snapshot_conf.h was mixing three separate types: the snapshot definition, the snapshot object, and the snapshot object list. Separate out the snapshot object list code into its own file, and update includes for affected clients. This is just code motion, but done in preparation of sharing a lot of the object list code with checkpoints. Signed-off-by: Eric Blake Reviewed-by: J=C3=A1n Tomko --- src/conf/snapshot_conf.h | 43 --- src/conf/virdomainsnapshotobjlist.h | 74 ++++ src/conf/Makefile.inc.am | 2 + src/conf/domain_conf.c | 1 + src/conf/snapshot_conf.c | 519 +------------------------- src/conf/virdomainobjlist.c | 1 + src/conf/virdomainsnapshotobj.c | 1 + src/conf/virdomainsnapshotobjlist.c | 553 ++++++++++++++++++++++++++++ src/libvirt_private.syms | 27 +- src/qemu/qemu_command.c | 1 + src/qemu/qemu_domain.c | 1 + src/qemu/qemu_driver.c | 1 + src/qemu/qemu_migration.c | 1 + src/test/test_driver.c | 1 + 14 files changed, 653 insertions(+), 573 deletions(-) create mode 100644 src/conf/virdomainsnapshotobjlist.h create mode 100644 src/conf/virdomainsnapshotobjlist.c diff --git a/src/conf/snapshot_conf.h b/src/conf/snapshot_conf.h index c816ad06e1..7230b9950f 100644 --- a/src/conf/snapshot_conf.h +++ b/src/conf/snapshot_conf.h @@ -24,7 +24,6 @@ # include "internal.h" # include "domain_conf.h" -# include "virdomainsnapshotobj.h" /* Items related to snapshot state */ @@ -94,10 +93,6 @@ struct _virDomainSnapshotDef { bool current; /* At most one snapshot in the list should have this set= */ }; - -virDomainSnapshotObjListPtr virDomainSnapshotObjListNew(void); -void virDomainSnapshotObjListFree(virDomainSnapshotObjListPtr snapshots); - typedef enum { VIR_DOMAIN_SNAPSHOT_PARSE_REDEFINE =3D 1 << 0, VIR_DOMAIN_SNAPSHOT_PARSE_DISKS =3D 1 << 1, @@ -121,13 +116,6 @@ virDomainSnapshotDefPtr virDomainSnapshotDefParseNode(= xmlDocPtr xml, virCapsPtr caps, virDomainXMLOptionPt= r xmlopt, unsigned int flags); -int virDomainSnapshotObjListParse(const char *xmlStr, - const unsigned char *domain_uuid, - virDomainSnapshotObjListPtr snapshots, - virDomainSnapshotObjPtr *current_snap, - virCapsPtr caps, - virDomainXMLOptionPtr xmlopt, - unsigned int flags); void virDomainSnapshotDefFree(virDomainSnapshotDefPtr def); char *virDomainSnapshotDefFormat(const char *uuidstr, virDomainSnapshotDefPtr def, @@ -141,34 +129,9 @@ int virDomainSnapshotDefFormatInternal(virBufferPtr bu= f, virDomainXMLOptionPtr xmlopt, unsigned int flags); -int virDomainSnapshotObjListFormat(virBufferPtr buf, - const char *uuidstr, - virDomainSnapshotObjListPtr snapshots, - virDomainSnapshotObjPtr current_snapsho= t, - virCapsPtr caps, - virDomainXMLOptionPtr xmlopt, - unsigned int flags); int virDomainSnapshotAlignDisks(virDomainSnapshotDefPtr snapshot, int default_snapshot, bool require_match); -virDomainSnapshotObjPtr virDomainSnapshotAssignDef(virDomainSnapshotObjLis= tPtr snapshots, - virDomainSnapshotDefPtr= def); - -int virDomainSnapshotObjListGetNames(virDomainSnapshotObjListPtr snapshots, - virDomainSnapshotObjPtr from, - char **const names, int maxnames, - unsigned int flags); -int virDomainSnapshotObjListNum(virDomainSnapshotObjListPtr snapshots, - virDomainSnapshotObjPtr from, - unsigned int flags); -virDomainSnapshotObjPtr virDomainSnapshotFindByName(virDomainSnapshotObjLi= stPtr snapshots, - const char *name); -void virDomainSnapshotObjListRemove(virDomainSnapshotObjListPtr snapshots, - virDomainSnapshotObjPtr snapshot); -int virDomainSnapshotForEach(virDomainSnapshotObjListPtr snapshots, - virHashIterator iter, - void *data); -int virDomainSnapshotUpdateRelations(virDomainSnapshotObjListPtr snapshots= ); # define VIR_DOMAIN_SNAPSHOT_FILTERS_METADATA \ (VIR_DOMAIN_SNAPSHOT_LIST_METADATA | \ @@ -193,12 +156,6 @@ int virDomainSnapshotUpdateRelations(virDomainSnapshot= ObjListPtr snapshots); VIR_DOMAIN_SNAPSHOT_FILTERS_STATUS | \ VIR_DOMAIN_SNAPSHOT_FILTERS_LOCATION) -int virDomainListSnapshots(virDomainSnapshotObjListPtr snapshots, - virDomainSnapshotObjPtr from, - virDomainPtr dom, - virDomainSnapshotPtr **snaps, - unsigned int flags); - bool virDomainSnapshotDefIsExternal(virDomainSnapshotDefPtr def); bool virDomainSnapshotIsExternal(virDomainSnapshotObjPtr snap); diff --git a/src/conf/virdomainsnapshotobjlist.h b/src/conf/virdomainsnapsh= otobjlist.h new file mode 100644 index 0000000000..ae4799c025 --- /dev/null +++ b/src/conf/virdomainsnapshotobjlist.h @@ -0,0 +1,74 @@ +/* + * virdomainsnapshotobjlist.h: handle a tree of snapshot objects + * (derived from snapshot_conf.h) + * + * Copyright (C) 2006-2019 Red Hat, Inc. + * Copyright (C) 2006-2008 Daniel P. Berrange + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#ifndef LIBVIRT_VIRDOMAINSNAPSHOTOBJLIST_H +# define LIBVIRT_VIRDOMAINSNAPSHOTOBJLIST_H + +# include "internal.h" +# include "virdomainsnapshotobj.h" +# include "capabilities.h" +# include "virbuffer.h" + +virDomainSnapshotObjListPtr virDomainSnapshotObjListNew(void); +void virDomainSnapshotObjListFree(virDomainSnapshotObjListPtr snapshots); + +int virDomainSnapshotObjListParse(const char *xmlStr, + const unsigned char *domain_uuid, + virDomainSnapshotObjListPtr snapshots, + virDomainSnapshotObjPtr *current_snap, + virCapsPtr caps, + virDomainXMLOptionPtr xmlopt, + unsigned int flags); +int virDomainSnapshotObjListFormat(virBufferPtr buf, + const char *uuidstr, + virDomainSnapshotObjListPtr snapshots, + virDomainSnapshotObjPtr current_snapsho= t, + virCapsPtr caps, + virDomainXMLOptionPtr xmlopt, + unsigned int flags); + +virDomainSnapshotObjPtr virDomainSnapshotAssignDef(virDomainSnapshotObjLis= tPtr snapshots, + virDomainSnapshotDefPtr= def); + +int virDomainSnapshotObjListGetNames(virDomainSnapshotObjListPtr snapshots, + virDomainSnapshotObjPtr from, + char **const names, int maxnames, + unsigned int flags); +int virDomainSnapshotObjListNum(virDomainSnapshotObjListPtr snapshots, + virDomainSnapshotObjPtr from, + unsigned int flags); +virDomainSnapshotObjPtr virDomainSnapshotFindByName(virDomainSnapshotObjLi= stPtr snapshots, + const char *name); +void virDomainSnapshotObjListRemove(virDomainSnapshotObjListPtr snapshots, + virDomainSnapshotObjPtr snapshot); +int virDomainSnapshotForEach(virDomainSnapshotObjListPtr snapshots, + virHashIterator iter, + void *data); +int virDomainSnapshotUpdateRelations(virDomainSnapshotObjListPtr snapshots= ); + +int virDomainListSnapshots(virDomainSnapshotObjListPtr snapshots, + virDomainSnapshotObjPtr from, + virDomainPtr dom, + virDomainSnapshotPtr **snaps, + unsigned int flags); + +#endif /* LIBVIRT_VIRDOMAINSNAPSHOTOBJLIST_H */ diff --git a/src/conf/Makefile.inc.am b/src/conf/Makefile.inc.am index be941ee7e2..9b4d80485b 100644 --- a/src/conf/Makefile.inc.am +++ b/src/conf/Makefile.inc.am @@ -31,6 +31,8 @@ DOMAIN_CONF_SOURCES =3D \ conf/virdomainobjlist.h \ conf/virdomainsnapshotobj.c \ conf/virdomainsnapshotobj.h \ + conf/virdomainsnapshotobjlist.c \ + conf/virdomainsnapshotobjlist.h \ $(NULL) OBJECT_EVENT_SOURCES =3D \ diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 114d7edf4f..504c24b545 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -57,6 +57,7 @@ #include "virnetdevmacvlan.h" #include "virhostdev.h" #include "virmdev.h" +#include "virdomainsnapshotobjlist.h" #define VIR_FROM_THIS VIR_FROM_DOMAIN diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c index 560150977b..ffb1313c89 100644 --- a/src/conf/snapshot_conf.c +++ b/src/conf/snapshot_conf.c @@ -45,6 +45,7 @@ #include "virerror.h" #include "virxml.h" #include "virstring.h" +#include "virdomainsnapshotobjlist.h" #define VIR_FROM_THIS VIR_FROM_DOMAIN_SNAPSHOT @@ -70,14 +71,6 @@ VIR_ENUM_IMPL(virDomainSnapshotState, VIR_DOMAIN_SNAPSHO= T_LAST, "disk-snapshot", ); -struct _virDomainSnapshotObjList { - /* name string -> virDomainSnapshotObj mapping - * for O(1), lockless lookup-by-name */ - virHashTable *objs; - - virDomainSnapshotObj metaroot; /* Special parent of all root snapshots= */ -}; - /* Snapshot Def functions */ static void virDomainSnapshotDiskDefClear(virDomainSnapshotDiskDefPtr disk) @@ -507,116 +500,6 @@ virDomainSnapshotRedefineValidate(virDomainSnapshotDe= fPtr def, } -/* Parse a XML entry into snapshots, which must start empty. - * Any sub-elements of a must match domain_uuid. - */ -int -virDomainSnapshotObjListParse(const char *xmlStr, - const unsigned char *domain_uuid, - virDomainSnapshotObjListPtr snapshots, - virDomainSnapshotObjPtr *current_snap, - virCapsPtr caps, - virDomainXMLOptionPtr xmlopt, - unsigned int flags) -{ - int ret =3D -1; - xmlDocPtr xml; - xmlNodePtr root; - xmlXPathContextPtr ctxt =3D NULL; - int n; - size_t i; - int keepBlanksDefault =3D xmlKeepBlanksDefault(0); - VIR_AUTOFREE(xmlNodePtr *) nodes =3D NULL; - VIR_AUTOFREE(char *) current =3D NULL; - - if (!(flags & VIR_DOMAIN_SNAPSHOT_PARSE_REDEFINE) || - (flags & VIR_DOMAIN_SNAPSHOT_PARSE_INTERNAL)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("incorrect flags for bulk parse")); - return -1; - } - if (snapshots->metaroot.nchildren || *current_snap) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("bulk define of snapshots only possible with " - "no existing snapshot")); - return -1; - } - - if (!(xml =3D virXMLParse(NULL, xmlStr, _("(domain_snapshot)")))) - return -1; - - root =3D xmlDocGetRootElement(xml); - if (!virXMLNodeNameEqual(root, "snapshots")) { - virReportError(VIR_ERR_XML_ERROR, - _("unexpected root element <%s>, " - "expecting "), root->name); - goto cleanup; - } - ctxt =3D xmlXPathNewContext(xml); - if (ctxt =3D=3D NULL) { - virReportOOMError(); - goto cleanup; - } - ctxt->node =3D root; - current =3D virXMLPropString(root, "current"); - - if ((n =3D virXPathNodeSet("./domainsnapshot", ctxt, &nodes)) < 0) - goto cleanup; - if (!n) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("expected at least one child")); - goto cleanup; - } - - for (i =3D 0; i < n; i++) { - virDomainSnapshotDefPtr def; - virDomainSnapshotObjPtr snap; - - def =3D virDomainSnapshotDefParseNode(xml, nodes[i], caps, xmlopt,= flags); - if (!def) - goto cleanup; - if (!(snap =3D virDomainSnapshotAssignDef(snapshots, def))) { - virDomainSnapshotDefFree(def); - goto cleanup; - } - if (virDomainSnapshotRedefineValidate(def, domain_uuid, NULL, NULL, - flags) < 0) - goto cleanup; - } - - if (virDomainSnapshotUpdateRelations(snapshots) < 0) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _(" contains inconsistent parent-child " - "relationships")); - goto cleanup; - } - - if (current) { - if (!(*current_snap =3D virDomainSnapshotFindByName(snapshots, - current))) { - virReportError(VIR_ERR_NO_DOMAIN_SNAPSHOT, - _("no snapshot matching current=3D'%s'"), curre= nt); - goto cleanup; - } - (*current_snap)->def->current =3D true; - } - - ret =3D 0; - cleanup: - if (ret < 0) { - /* There were no snapshots before this call; so on error, just - * blindly delete anything created before the failure. */ - virHashRemoveAll(snapshots->objs); - snapshots->metaroot.nchildren =3D 0; - snapshots->metaroot.first_child =3D NULL; - } - xmlXPathFreeContext(ctxt); - xmlFreeDoc(xml); - xmlKeepBlanksDefault(keepBlanksDefault); - return ret; -} - - /** * virDomainSnapshotDefAssignExternalNames: * @def: snapshot def object @@ -1001,406 +884,6 @@ virDomainSnapshotDefFormat(const char *uuidstr, } -/* Struct and callback function used as a hash table callback; each call - * appends another snapshot XML to buf, with the caller clearing the - * buffer if any callback fails. */ -struct virDomainSnapshotFormatData { - virBufferPtr buf; - const char *uuidstr; - virCapsPtr caps; - virDomainXMLOptionPtr xmlopt; - unsigned int flags; -}; - -static int -virDomainSnapshotFormatOne(void *payload, - const void *name ATTRIBUTE_UNUSED, - void *opaque) -{ - virDomainSnapshotObjPtr snap =3D payload; - struct virDomainSnapshotFormatData *data =3D opaque; - return virDomainSnapshotDefFormatInternal(data->buf, data->uuidstr, - snap->def, data->caps, - data->xmlopt, data->flags); -} - - -/* Format the XML for all snapshots in the list into buf. On error, - * clear the buffer and return -1. */ -int -virDomainSnapshotObjListFormat(virBufferPtr buf, - const char *uuidstr, - virDomainSnapshotObjListPtr snapshots, - virDomainSnapshotObjPtr current_snapshot, - virCapsPtr caps, - virDomainXMLOptionPtr xmlopt, - unsigned int flags) -{ - struct virDomainSnapshotFormatData data =3D { - .buf =3D buf, - .uuidstr =3D uuidstr, - .caps =3D caps, - .xmlopt =3D xmlopt, - .flags =3D flags, - }; - - virBufferAddLit(buf, "def->name); - virBufferAddLit(buf, ">\n"); - virBufferAdjustIndent(buf, 2); - if (virDomainSnapshotForEach(snapshots, virDomainSnapshotFormatOne, - &data) < 0) { - virBufferFreeAndReset(buf); - return -1; - } - virBufferAdjustIndent(buf, -2); - virBufferAddLit(buf, "\n"); - return 0; -} - - -/* Snapshot Obj functions */ -static virDomainSnapshotObjPtr virDomainSnapshotObjNew(void) -{ - virDomainSnapshotObjPtr snapshot; - - if (VIR_ALLOC(snapshot) < 0) - return NULL; - - VIR_DEBUG("obj=3D%p", snapshot); - - return snapshot; -} - -static void virDomainSnapshotObjFree(virDomainSnapshotObjPtr snapshot) -{ - if (!snapshot) - return; - - VIR_DEBUG("obj=3D%p", snapshot); - - virDomainSnapshotDefFree(snapshot->def); - VIR_FREE(snapshot); -} - -virDomainSnapshotObjPtr virDomainSnapshotAssignDef(virDomainSnapshotObjLis= tPtr snapshots, - virDomainSnapshotDefPtr= def) -{ - virDomainSnapshotObjPtr snap; - - if (virHashLookup(snapshots->objs, def->name) !=3D NULL) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("unexpected domain snapshot %s already exists"), - def->name); - return NULL; - } - - if (!(snap =3D virDomainSnapshotObjNew())) - return NULL; - snap->def =3D def; - - if (virHashAddEntry(snapshots->objs, snap->def->name, snap) < 0) { - VIR_FREE(snap); - return NULL; - } - - return snap; -} - -/* Snapshot Obj List functions */ -static void -virDomainSnapshotObjListDataFree(void *payload, - const void *name ATTRIBUTE_UNUSED) -{ - virDomainSnapshotObjPtr obj =3D payload; - - virDomainSnapshotObjFree(obj); -} - -virDomainSnapshotObjListPtr -virDomainSnapshotObjListNew(void) -{ - virDomainSnapshotObjListPtr snapshots; - if (VIR_ALLOC(snapshots) < 0) - return NULL; - snapshots->objs =3D virHashCreate(50, virDomainSnapshotObjListDataFree= ); - if (!snapshots->objs) { - VIR_FREE(snapshots); - return NULL; - } - return snapshots; -} - -void -virDomainSnapshotObjListFree(virDomainSnapshotObjListPtr snapshots) -{ - if (!snapshots) - return; - virHashFree(snapshots->objs); - VIR_FREE(snapshots); -} - -struct virDomainSnapshotNameData { - char **const names; - int maxnames; - unsigned int flags; - int count; - bool error; -}; - -static int virDomainSnapshotObjListCopyNames(void *payload, - const void *name ATTRIBUTE_UN= USED, - void *opaque) -{ - virDomainSnapshotObjPtr obj =3D payload; - struct virDomainSnapshotNameData *data =3D opaque; - - if (data->error) - return 0; - /* Caller already sanitized flags. Filtering on DESCENDANTS was - * done by choice of iteration in the caller. */ - if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_LEAVES) && obj->nchildren) - return 0; - if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_NO_LEAVES) && !obj->nchild= ren) - return 0; - - if (data->flags & VIR_DOMAIN_SNAPSHOT_FILTERS_STATUS) { - if (!(data->flags & VIR_DOMAIN_SNAPSHOT_LIST_INACTIVE) && - obj->def->state =3D=3D VIR_DOMAIN_SNAPSHOT_SHUTOFF) - return 0; - if (!(data->flags & VIR_DOMAIN_SNAPSHOT_LIST_DISK_ONLY) && - obj->def->state =3D=3D VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT) - return 0; - if (!(data->flags & VIR_DOMAIN_SNAPSHOT_LIST_ACTIVE) && - obj->def->state !=3D VIR_DOMAIN_SNAPSHOT_SHUTOFF && - obj->def->state !=3D VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT) - return 0; - } - - if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_INTERNAL) && - virDomainSnapshotIsExternal(obj)) - return 0; - if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_EXTERNAL) && - !virDomainSnapshotIsExternal(obj)) - return 0; - - if (data->names && data->count < data->maxnames && - VIR_STRDUP(data->names[data->count], obj->def->name) < 0) { - data->error =3D true; - return 0; - } - data->count++; - return 0; -} - -int -virDomainSnapshotObjListGetNames(virDomainSnapshotObjListPtr snapshots, - virDomainSnapshotObjPtr from, - char **const names, int maxnames, - unsigned int flags) -{ - struct virDomainSnapshotNameData data =3D { names, maxnames, flags, 0, - false }; - size_t i; - - if (!from) { - /* LIST_ROOTS and LIST_DESCENDANTS have the same bit value, - * but opposite semantics. Toggle here to get the correct - * traversal on the metaroot. */ - flags ^=3D VIR_DOMAIN_SNAPSHOT_LIST_ROOTS; - from =3D &snapshots->metaroot; - } - - /* We handle LIST_ROOT/LIST_DESCENDANTS and LIST_TOPOLOGICAL directly, - * mask those bits out to determine when we must use the filter callba= ck. */ - data.flags &=3D ~(VIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS | - VIR_DOMAIN_SNAPSHOT_LIST_TOPOLOGICAL); - - /* If this common code is being used, we assume that all snapshots - * have metadata, and thus can handle METADATA up front as an - * all-or-none filter. XXX This might not always be true, if we - * add the ability to track qcow2 internal snapshots without the - * use of metadata. */ - if ((data.flags & VIR_DOMAIN_SNAPSHOT_FILTERS_METADATA) =3D=3D - VIR_DOMAIN_SNAPSHOT_LIST_NO_METADATA) - return 0; - data.flags &=3D ~VIR_DOMAIN_SNAPSHOT_FILTERS_METADATA; - - /* For ease of coding the visitor, it is easier to zero each group - * where all of the bits are set. */ - if ((data.flags & VIR_DOMAIN_SNAPSHOT_FILTERS_LEAVES) =3D=3D - VIR_DOMAIN_SNAPSHOT_FILTERS_LEAVES) - data.flags &=3D ~VIR_DOMAIN_SNAPSHOT_FILTERS_LEAVES; - if ((data.flags & VIR_DOMAIN_SNAPSHOT_FILTERS_STATUS) =3D=3D - VIR_DOMAIN_SNAPSHOT_FILTERS_STATUS) - data.flags &=3D ~VIR_DOMAIN_SNAPSHOT_FILTERS_STATUS; - if ((data.flags & VIR_DOMAIN_SNAPSHOT_FILTERS_LOCATION) =3D=3D - VIR_DOMAIN_SNAPSHOT_FILTERS_LOCATION) - data.flags &=3D ~VIR_DOMAIN_SNAPSHOT_FILTERS_LOCATION; - - if (flags & VIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS) { - /* We could just always do a topological visit; but it is - * possible to optimize for less stack usage and time when a - * simpler full hashtable visit or counter will do. */ - if (from->def || (names && - (flags & VIR_DOMAIN_SNAPSHOT_LIST_TOPOLOGICAL))) - virDomainSnapshotForEachDescendant(from, - virDomainSnapshotObjListCop= yNames, - &data); - else if (names || data.flags) - virHashForEach(snapshots->objs, virDomainSnapshotObjListCopyNa= mes, - &data); - else - data.count =3D virHashSize(snapshots->objs); - } else if (names || data.flags) { - virDomainSnapshotForEachChild(from, - virDomainSnapshotObjListCopyNames, &= data); - } else { - data.count =3D from->nchildren; - } - - if (data.error) { - for (i =3D 0; i < data.count; i++) - VIR_FREE(names[i]); - return -1; - } - - return data.count; -} - -int -virDomainSnapshotObjListNum(virDomainSnapshotObjListPtr snapshots, - virDomainSnapshotObjPtr from, - unsigned int flags) -{ - return virDomainSnapshotObjListGetNames(snapshots, from, NULL, 0, flag= s); -} - -virDomainSnapshotObjPtr -virDomainSnapshotFindByName(virDomainSnapshotObjListPtr snapshots, - const char *name) -{ - return name ? virHashLookup(snapshots->objs, name) : &snapshots->metar= oot; -} - -void virDomainSnapshotObjListRemove(virDomainSnapshotObjListPtr snapshots, - virDomainSnapshotObjPtr snapshot) -{ - virHashRemoveEntry(snapshots->objs, snapshot->def->name); -} - -int -virDomainSnapshotForEach(virDomainSnapshotObjListPtr snapshots, - virHashIterator iter, - void *data) -{ - return virHashForEach(snapshots->objs, iter, data); -} - - -/* Struct and callback function used as a hash table callback; each call - * inspects the pre-existing snapshot->def->parent field, and adjusts - * the snapshot->parent field as well as the parent's child fields to - * wire up the hierarchical relations for the given snapshot. The error - * indicator gets set if a parent is missing or a requested parent would - * cause a circular parent chain. */ -struct snapshot_set_relation { - virDomainSnapshotObjListPtr snapshots; - int err; -}; -static int -virDomainSnapshotSetRelations(void *payload, - const void *name ATTRIBUTE_UNUSED, - void *data) -{ - virDomainSnapshotObjPtr obj =3D payload; - struct snapshot_set_relation *curr =3D data; - virDomainSnapshotObjPtr tmp; - - obj->parent =3D virDomainSnapshotFindByName(curr->snapshots, - obj->def->parent); - if (!obj->parent) { - curr->err =3D -1; - obj->parent =3D &curr->snapshots->metaroot; - VIR_WARN("snapshot %s lacks parent", obj->def->name); - } else { - tmp =3D obj->parent; - while (tmp && tmp->def) { - if (tmp =3D=3D obj) { - curr->err =3D -1; - obj->parent =3D &curr->snapshots->metaroot; - VIR_WARN("snapshot %s in circular chain", obj->def->name); - break; - } - tmp =3D tmp->parent; - } - } - obj->parent->nchildren++; - obj->sibling =3D obj->parent->first_child; - obj->parent->first_child =3D obj; - return 0; -} - -/* Populate parent link and child count of all snapshots, with all - * assigned defs having relations starting as 0/NULL. Return 0 on - * success, -1 if a parent is missing or if a circular relationship - * was requested. */ -int -virDomainSnapshotUpdateRelations(virDomainSnapshotObjListPtr snapshots) -{ - struct snapshot_set_relation act =3D { snapshots, 0 }; - - snapshots->metaroot.nchildren =3D 0; - snapshots->metaroot.first_child =3D NULL; - virHashForEach(snapshots->objs, virDomainSnapshotSetRelations, &act); - return act.err; -} - - -int -virDomainListSnapshots(virDomainSnapshotObjListPtr snapshots, - virDomainSnapshotObjPtr from, - virDomainPtr dom, - virDomainSnapshotPtr **snaps, - unsigned int flags) -{ - int count =3D virDomainSnapshotObjListNum(snapshots, from, flags); - virDomainSnapshotPtr *list =3D NULL; - char **names; - int ret =3D -1; - size_t i; - - if (!snaps || count < 0) - return count; - if (VIR_ALLOC_N(names, count) < 0 || - VIR_ALLOC_N(list, count + 1) < 0) - goto cleanup; - - if (virDomainSnapshotObjListGetNames(snapshots, from, names, count, - flags) < 0) - goto cleanup; - for (i =3D 0; i < count; i++) - if ((list[i] =3D virGetDomainSnapshot(dom, names[i])) =3D=3D NULL) - goto cleanup; - - ret =3D count; - *snaps =3D list; - - cleanup: - for (i =3D 0; i < count; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - if (ret < 0 && list) { - for (i =3D 0; i < count; i++) - virObjectUnref(list[i]); - VIR_FREE(list); - } - return ret; -} - - bool virDomainSnapshotDefIsExternal(virDomainSnapshotDefPtr def) { diff --git a/src/conf/virdomainobjlist.c b/src/conf/virdomainobjlist.c index 7742de94f2..a814fc10a3 100644 --- a/src/conf/virdomainobjlist.c +++ b/src/conf/virdomainobjlist.c @@ -30,6 +30,7 @@ #include "virfile.h" #include "virlog.h" #include "virstring.h" +#include "virdomainsnapshotobjlist.h" #define VIR_FROM_THIS VIR_FROM_DOMAIN diff --git a/src/conf/virdomainsnapshotobj.c b/src/conf/virdomainsnapshotob= j.c index 487f0cc702..7f92ac21d9 100644 --- a/src/conf/virdomainsnapshotobj.c +++ b/src/conf/virdomainsnapshotobj.c @@ -25,6 +25,7 @@ #include "internal.h" #include "virdomainsnapshotobj.h" #include "snapshot_conf.h" +#include "virdomainsnapshotobjlist.h" #include "virlog.h" #include "virerror.h" diff --git a/src/conf/virdomainsnapshotobjlist.c b/src/conf/virdomainsnapsh= otobjlist.c new file mode 100644 index 0000000000..e2f2110108 --- /dev/null +++ b/src/conf/virdomainsnapshotobjlist.c @@ -0,0 +1,553 @@ +/* + * virdomainsnapshotobjlist.c: handle a tree of snapshot objects + * (derived from snapshot_conf.c) + * + * Copyright (C) 2006-2019 Red Hat, Inc. + * Copyright (C) 2006-2008 Daniel P. Berrange + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#include + +#include "internal.h" +#include "virdomainsnapshotobjlist.h" +#include "snapshot_conf.h" +#include "virlog.h" +#include "virerror.h" +#include "datatypes.h" +#include "virstring.h" + +#define VIR_FROM_THIS VIR_FROM_DOMAIN_SNAPSHOT + +VIR_LOG_INIT("conf.virdomainsnapshotobjlist"); + +struct _virDomainSnapshotObjList { + /* name string -> virDomainSnapshotObj mapping + * for O(1), lockless lookup-by-name */ + virHashTable *objs; + + virDomainSnapshotObj metaroot; /* Special parent of all root snapshots= */ +}; + + +/* Parse a XML entry into snapshots, which must start empty. + * Any sub-elements of a must match domain_uuid. + */ +int +virDomainSnapshotObjListParse(const char *xmlStr, + const unsigned char *domain_uuid, + virDomainSnapshotObjListPtr snapshots, + virDomainSnapshotObjPtr *current_snap, + virCapsPtr caps, + virDomainXMLOptionPtr xmlopt, + unsigned int flags) +{ + int ret =3D -1; + xmlDocPtr xml; + xmlNodePtr root; + xmlXPathContextPtr ctxt =3D NULL; + int n; + size_t i; + int keepBlanksDefault =3D xmlKeepBlanksDefault(0); + VIR_AUTOFREE(xmlNodePtr *) nodes =3D NULL; + VIR_AUTOFREE(char *) current =3D NULL; + + if (!(flags & VIR_DOMAIN_SNAPSHOT_PARSE_REDEFINE) || + (flags & VIR_DOMAIN_SNAPSHOT_PARSE_INTERNAL)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("incorrect flags for bulk parse")); + return -1; + } + if (snapshots->metaroot.nchildren || *current_snap) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("bulk define of snapshots only possible with " + "no existing snapshot")); + return -1; + } + + if (!(xml =3D virXMLParse(NULL, xmlStr, _("(domain_snapshot)")))) + return -1; + + root =3D xmlDocGetRootElement(xml); + if (!virXMLNodeNameEqual(root, "snapshots")) { + virReportError(VIR_ERR_XML_ERROR, + _("unexpected root element <%s>, " + "expecting "), root->name); + goto cleanup; + } + ctxt =3D xmlXPathNewContext(xml); + if (ctxt =3D=3D NULL) { + virReportOOMError(); + goto cleanup; + } + ctxt->node =3D root; + current =3D virXMLPropString(root, "current"); + + if ((n =3D virXPathNodeSet("./domainsnapshot", ctxt, &nodes)) < 0) + goto cleanup; + if (!n) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("expected at least one child")); + goto cleanup; + } + + for (i =3D 0; i < n; i++) { + virDomainSnapshotDefPtr def; + virDomainSnapshotObjPtr snap; + + def =3D virDomainSnapshotDefParseNode(xml, nodes[i], caps, xmlopt,= flags); + if (!def) + goto cleanup; + if (!(snap =3D virDomainSnapshotAssignDef(snapshots, def))) { + virDomainSnapshotDefFree(def); + goto cleanup; + } + if (virDomainSnapshotRedefineValidate(def, domain_uuid, NULL, NULL, + flags) < 0) + goto cleanup; + } + + if (virDomainSnapshotUpdateRelations(snapshots) < 0) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _(" contains inconsistent parent-child " + "relationships")); + goto cleanup; + } + + if (current) { + if (!(*current_snap =3D virDomainSnapshotFindByName(snapshots, + current))) { + virReportError(VIR_ERR_NO_DOMAIN_SNAPSHOT, + _("no snapshot matching current=3D'%s'"), curre= nt); + goto cleanup; + } + (*current_snap)->def->current =3D true; + } + + ret =3D 0; + cleanup: + if (ret < 0) { + /* There were no snapshots before this call; so on error, just + * blindly delete anything created before the failure. */ + virHashRemoveAll(snapshots->objs); + snapshots->metaroot.nchildren =3D 0; + snapshots->metaroot.first_child =3D NULL; + } + xmlXPathFreeContext(ctxt); + xmlFreeDoc(xml); + xmlKeepBlanksDefault(keepBlanksDefault); + return ret; +} + + +/* Struct and callback function used as a hash table callback; each call + * appends another snapshot XML to buf, with the caller clearing the + * buffer if any callback fails. */ +struct virDomainSnapshotFormatData { + virBufferPtr buf; + const char *uuidstr; + virCapsPtr caps; + virDomainXMLOptionPtr xmlopt; + unsigned int flags; +}; + +static int +virDomainSnapshotFormatOne(void *payload, + const void *name ATTRIBUTE_UNUSED, + void *opaque) +{ + virDomainSnapshotObjPtr snap =3D payload; + struct virDomainSnapshotFormatData *data =3D opaque; + return virDomainSnapshotDefFormatInternal(data->buf, data->uuidstr, + snap->def, data->caps, + data->xmlopt, data->flags); +} + + +/* Format the XML for all snapshots in the list into buf. On error, + * clear the buffer and return -1. */ +int +virDomainSnapshotObjListFormat(virBufferPtr buf, + const char *uuidstr, + virDomainSnapshotObjListPtr snapshots, + virDomainSnapshotObjPtr current_snapshot, + virCapsPtr caps, + virDomainXMLOptionPtr xmlopt, + unsigned int flags) +{ + struct virDomainSnapshotFormatData data =3D { + .buf =3D buf, + .uuidstr =3D uuidstr, + .caps =3D caps, + .xmlopt =3D xmlopt, + .flags =3D flags, + }; + + virBufferAddLit(buf, "def->name); + virBufferAddLit(buf, ">\n"); + virBufferAdjustIndent(buf, 2); + if (virDomainSnapshotForEach(snapshots, virDomainSnapshotFormatOne, + &data) < 0) { + virBufferFreeAndReset(buf); + return -1; + } + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); + return 0; +} + + +/* Snapshot Obj functions */ +static virDomainSnapshotObjPtr virDomainSnapshotObjNew(void) +{ + virDomainSnapshotObjPtr snapshot; + + if (VIR_ALLOC(snapshot) < 0) + return NULL; + + VIR_DEBUG("obj=3D%p", snapshot); + + return snapshot; +} + +static void virDomainSnapshotObjFree(virDomainSnapshotObjPtr snapshot) +{ + if (!snapshot) + return; + + VIR_DEBUG("obj=3D%p", snapshot); + + virDomainSnapshotDefFree(snapshot->def); + VIR_FREE(snapshot); +} + +virDomainSnapshotObjPtr virDomainSnapshotAssignDef(virDomainSnapshotObjLis= tPtr snapshots, + virDomainSnapshotDefPtr= def) +{ + virDomainSnapshotObjPtr snap; + + if (virHashLookup(snapshots->objs, def->name) !=3D NULL) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("unexpected domain snapshot %s already exists"), + def->name); + return NULL; + } + + if (!(snap =3D virDomainSnapshotObjNew())) + return NULL; + snap->def =3D def; + + if (virHashAddEntry(snapshots->objs, snap->def->name, snap) < 0) { + VIR_FREE(snap); + return NULL; + } + + return snap; +} + +/* Snapshot Obj List functions */ +static void +virDomainSnapshotObjListDataFree(void *payload, + const void *name ATTRIBUTE_UNUSED) +{ + virDomainSnapshotObjPtr obj =3D payload; + + virDomainSnapshotObjFree(obj); +} + +virDomainSnapshotObjListPtr +virDomainSnapshotObjListNew(void) +{ + virDomainSnapshotObjListPtr snapshots; + if (VIR_ALLOC(snapshots) < 0) + return NULL; + snapshots->objs =3D virHashCreate(50, virDomainSnapshotObjListDataFree= ); + if (!snapshots->objs) { + VIR_FREE(snapshots); + return NULL; + } + return snapshots; +} + +void +virDomainSnapshotObjListFree(virDomainSnapshotObjListPtr snapshots) +{ + if (!snapshots) + return; + virHashFree(snapshots->objs); + VIR_FREE(snapshots); +} + +struct virDomainSnapshotNameData { + char **const names; + int maxnames; + unsigned int flags; + int count; + bool error; +}; + +static int virDomainSnapshotObjListCopyNames(void *payload, + const void *name ATTRIBUTE_UN= USED, + void *opaque) +{ + virDomainSnapshotObjPtr obj =3D payload; + struct virDomainSnapshotNameData *data =3D opaque; + + if (data->error) + return 0; + /* Caller already sanitized flags. Filtering on DESCENDANTS was + * done by choice of iteration in the caller. */ + if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_LEAVES) && obj->nchildren) + return 0; + if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_NO_LEAVES) && !obj->nchild= ren) + return 0; + + if (data->flags & VIR_DOMAIN_SNAPSHOT_FILTERS_STATUS) { + if (!(data->flags & VIR_DOMAIN_SNAPSHOT_LIST_INACTIVE) && + obj->def->state =3D=3D VIR_DOMAIN_SNAPSHOT_SHUTOFF) + return 0; + if (!(data->flags & VIR_DOMAIN_SNAPSHOT_LIST_DISK_ONLY) && + obj->def->state =3D=3D VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT) + return 0; + if (!(data->flags & VIR_DOMAIN_SNAPSHOT_LIST_ACTIVE) && + obj->def->state !=3D VIR_DOMAIN_SNAPSHOT_SHUTOFF && + obj->def->state !=3D VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT) + return 0; + } + + if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_INTERNAL) && + virDomainSnapshotIsExternal(obj)) + return 0; + if ((data->flags & VIR_DOMAIN_SNAPSHOT_LIST_EXTERNAL) && + !virDomainSnapshotIsExternal(obj)) + return 0; + + if (data->names && data->count < data->maxnames && + VIR_STRDUP(data->names[data->count], obj->def->name) < 0) { + data->error =3D true; + return 0; + } + data->count++; + return 0; +} + +int +virDomainSnapshotObjListGetNames(virDomainSnapshotObjListPtr snapshots, + virDomainSnapshotObjPtr from, + char **const names, int maxnames, + unsigned int flags) +{ + struct virDomainSnapshotNameData data =3D { names, maxnames, flags, 0, + false }; + size_t i; + + if (!from) { + /* LIST_ROOTS and LIST_DESCENDANTS have the same bit value, + * but opposite semantics. Toggle here to get the correct + * traversal on the metaroot. */ + flags ^=3D VIR_DOMAIN_SNAPSHOT_LIST_ROOTS; + from =3D &snapshots->metaroot; + } + + /* We handle LIST_ROOT/LIST_DESCENDANTS and LIST_TOPOLOGICAL directly, + * mask those bits out to determine when we must use the filter callba= ck. */ + data.flags &=3D ~(VIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS | + VIR_DOMAIN_SNAPSHOT_LIST_TOPOLOGICAL); + + /* If this common code is being used, we assume that all snapshots + * have metadata, and thus can handle METADATA up front as an + * all-or-none filter. XXX This might not always be true, if we + * add the ability to track qcow2 internal snapshots without the + * use of metadata. */ + if ((data.flags & VIR_DOMAIN_SNAPSHOT_FILTERS_METADATA) =3D=3D + VIR_DOMAIN_SNAPSHOT_LIST_NO_METADATA) + return 0; + data.flags &=3D ~VIR_DOMAIN_SNAPSHOT_FILTERS_METADATA; + + /* For ease of coding the visitor, it is easier to zero each group + * where all of the bits are set. */ + if ((data.flags & VIR_DOMAIN_SNAPSHOT_FILTERS_LEAVES) =3D=3D + VIR_DOMAIN_SNAPSHOT_FILTERS_LEAVES) + data.flags &=3D ~VIR_DOMAIN_SNAPSHOT_FILTERS_LEAVES; + if ((data.flags & VIR_DOMAIN_SNAPSHOT_FILTERS_STATUS) =3D=3D + VIR_DOMAIN_SNAPSHOT_FILTERS_STATUS) + data.flags &=3D ~VIR_DOMAIN_SNAPSHOT_FILTERS_STATUS; + if ((data.flags & VIR_DOMAIN_SNAPSHOT_FILTERS_LOCATION) =3D=3D + VIR_DOMAIN_SNAPSHOT_FILTERS_LOCATION) + data.flags &=3D ~VIR_DOMAIN_SNAPSHOT_FILTERS_LOCATION; + + if (flags & VIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS) { + /* We could just always do a topological visit; but it is + * possible to optimize for less stack usage and time when a + * simpler full hashtable visit or counter will do. */ + if (from->def || (names && + (flags & VIR_DOMAIN_SNAPSHOT_LIST_TOPOLOGICAL))) + virDomainSnapshotForEachDescendant(from, + virDomainSnapshotObjListCop= yNames, + &data); + else if (names || data.flags) + virHashForEach(snapshots->objs, virDomainSnapshotObjListCopyNa= mes, + &data); + else + data.count =3D virHashSize(snapshots->objs); + } else if (names || data.flags) { + virDomainSnapshotForEachChild(from, + virDomainSnapshotObjListCopyNames, &= data); + } else { + data.count =3D from->nchildren; + } + + if (data.error) { + for (i =3D 0; i < data.count; i++) + VIR_FREE(names[i]); + return -1; + } + + return data.count; +} + +int +virDomainSnapshotObjListNum(virDomainSnapshotObjListPtr snapshots, + virDomainSnapshotObjPtr from, + unsigned int flags) +{ + return virDomainSnapshotObjListGetNames(snapshots, from, NULL, 0, flag= s); +} + +virDomainSnapshotObjPtr +virDomainSnapshotFindByName(virDomainSnapshotObjListPtr snapshots, + const char *name) +{ + return name ? virHashLookup(snapshots->objs, name) : &snapshots->metar= oot; +} + +void virDomainSnapshotObjListRemove(virDomainSnapshotObjListPtr snapshots, + virDomainSnapshotObjPtr snapshot) +{ + virHashRemoveEntry(snapshots->objs, snapshot->def->name); +} + +int +virDomainSnapshotForEach(virDomainSnapshotObjListPtr snapshots, + virHashIterator iter, + void *data) +{ + return virHashForEach(snapshots->objs, iter, data); +} + + +/* Struct and callback function used as a hash table callback; each call + * inspects the pre-existing snapshot->def->parent field, and adjusts + * the snapshot->parent field as well as the parent's child fields to + * wire up the hierarchical relations for the given snapshot. The error + * indicator gets set if a parent is missing or a requested parent would + * cause a circular parent chain. */ +struct snapshot_set_relation { + virDomainSnapshotObjListPtr snapshots; + int err; +}; +static int +virDomainSnapshotSetRelations(void *payload, + const void *name ATTRIBUTE_UNUSED, + void *data) +{ + virDomainSnapshotObjPtr obj =3D payload; + struct snapshot_set_relation *curr =3D data; + virDomainSnapshotObjPtr tmp; + + obj->parent =3D virDomainSnapshotFindByName(curr->snapshots, + obj->def->parent); + if (!obj->parent) { + curr->err =3D -1; + obj->parent =3D &curr->snapshots->metaroot; + VIR_WARN("snapshot %s lacks parent", obj->def->name); + } else { + tmp =3D obj->parent; + while (tmp && tmp->def) { + if (tmp =3D=3D obj) { + curr->err =3D -1; + obj->parent =3D &curr->snapshots->metaroot; + VIR_WARN("snapshot %s in circular chain", obj->def->name); + break; + } + tmp =3D tmp->parent; + } + } + obj->parent->nchildren++; + obj->sibling =3D obj->parent->first_child; + obj->parent->first_child =3D obj; + return 0; +} + +/* Populate parent link and child count of all snapshots, with all + * assigned defs having relations starting as 0/NULL. Return 0 on + * success, -1 if a parent is missing or if a circular relationship + * was requested. */ +int +virDomainSnapshotUpdateRelations(virDomainSnapshotObjListPtr snapshots) +{ + struct snapshot_set_relation act =3D { snapshots, 0 }; + + snapshots->metaroot.nchildren =3D 0; + snapshots->metaroot.first_child =3D NULL; + virHashForEach(snapshots->objs, virDomainSnapshotSetRelations, &act); + return act.err; +} + + +int +virDomainListSnapshots(virDomainSnapshotObjListPtr snapshots, + virDomainSnapshotObjPtr from, + virDomainPtr dom, + virDomainSnapshotPtr **snaps, + unsigned int flags) +{ + int count =3D virDomainSnapshotObjListNum(snapshots, from, flags); + virDomainSnapshotPtr *list =3D NULL; + char **names; + int ret =3D -1; + size_t i; + + if (!snaps || count < 0) + return count; + if (VIR_ALLOC_N(names, count) < 0 || + VIR_ALLOC_N(list, count + 1) < 0) + goto cleanup; + + if (virDomainSnapshotObjListGetNames(snapshots, from, names, count, + flags) < 0) + goto cleanup; + for (i =3D 0; i < count; i++) + if ((list[i] =3D virGetDomainSnapshot(dom, names[i])) =3D=3D NULL) + goto cleanup; + + ret =3D count; + *snaps =3D list; + + cleanup: + for (i =3D 0; i < count; i++) + VIR_FREE(names[i]); + VIR_FREE(names); + if (ret < 0 && list) { + for (i =3D 0; i < count; i++) + virObjectUnref(list[i]); + VIR_FREE(list); + } + return ret; +} diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index d775fe8551..758ec9f102 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -883,30 +883,18 @@ virSecretEventValueChangedNew; # conf/snapshot_conf.h -virDomainListSnapshots; virDomainSnapshotAlignDisks; -virDomainSnapshotAssignDef; virDomainSnapshotDefFormat; virDomainSnapshotDefFree; virDomainSnapshotDefIsExternal; virDomainSnapshotDefParseString; -virDomainSnapshotFindByName; -virDomainSnapshotForEach; virDomainSnapshotFormatConvertXMLFlags; virDomainSnapshotIsExternal; virDomainSnapshotLocationTypeFromString; virDomainSnapshotLocationTypeToString; -virDomainSnapshotObjListFormat; -virDomainSnapshotObjListFree; -virDomainSnapshotObjListGetNames; -virDomainSnapshotObjListNew; -virDomainSnapshotObjListNum; -virDomainSnapshotObjListParse; -virDomainSnapshotObjListRemove; virDomainSnapshotRedefinePrep; virDomainSnapshotStateTypeFromString; virDomainSnapshotStateTypeToString; -virDomainSnapshotUpdateRelations; # conf/storage_adapter_conf.h @@ -995,6 +983,21 @@ virDomainSnapshotForEachChild; virDomainSnapshotForEachDescendant; +# conf/virdomainsnapshotobjlist.h +virDomainListSnapshots; +virDomainSnapshotAssignDef; +virDomainSnapshotFindByName; +virDomainSnapshotForEach; +virDomainSnapshotObjListFormat; +virDomainSnapshotObjListFree; +virDomainSnapshotObjListGetNames; +virDomainSnapshotObjListNew; +virDomainSnapshotObjListNum; +virDomainSnapshotObjListParse; +virDomainSnapshotObjListRemove; +virDomainSnapshotUpdateRelations; + + # conf/virinterfaceobj.h virInterfaceObjEndAPI; virInterfaceObjGetDef; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 1b82b70cc1..d2525c289a 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -58,6 +58,7 @@ #include "virnuma.h" #include "virgic.h" #include "virmdev.h" +#include "virdomainsnapshotobjlist.h" #if defined(__linux__) # include #endif diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 6a7a8e102b..86e80391e1 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -55,6 +55,7 @@ #include "secret_util.h" #include "logging/log_manager.h" #include "locking/domain_lock.h" +#include "virdomainsnapshotobjlist.h" #ifdef MAJOR_IN_MKDEV # include diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index e461fb51b0..75b5b26bca 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -101,6 +101,7 @@ #include "dirname.h" #include "netdev_bandwidth_conf.h" #include "virqemu.h" +#include "virdomainsnapshotobjlist.h" #define VIR_FROM_THIS VIR_FROM_QEMU diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 362b79e567..cb44081134 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -60,6 +60,7 @@ #include "virtypedparam.h" #include "virprocess.h" #include "nwfilter_conf.h" +#include "virdomainsnapshotobjlist.h" #define VIR_FROM_THIS VIR_FROM_QEMU diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 02cd4f4d07..4d49c987b5 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -63,6 +63,7 @@ #include "virdomainobjlist.h" #include "virinterfaceobj.h" #include "virhostcpu.h" +#include "virdomainsnapshotobjlist.h" #define VIR_FROM_THIS VIR_FROM_TEST --=20 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri Apr 19 19:50:23 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1552626173808146.40550240234938; Thu, 14 Mar 2019 22:02:53 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 048D63132C30; Fri, 15 Mar 2019 05:02:52 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D30B15C557; Fri, 15 Mar 2019 05:02:51 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 8D23D181A264; Fri, 15 Mar 2019 05:02:51 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x2F52gip010786 for ; Fri, 15 Mar 2019 01:02:42 -0400 Received: by smtp.corp.redhat.com (Postfix) id 762145D75E; Fri, 15 Mar 2019 05:02:42 +0000 (UTC) Received: from blue.redhat.com (ovpn-118-35.phx2.redhat.com [10.3.118.35]) by smtp.corp.redhat.com (Postfix) with ESMTP id BB1975D6A6; Fri, 15 Mar 2019 05:02:41 +0000 (UTC) From: Eric Blake To: libvir-list@redhat.com Date: Fri, 15 Mar 2019 00:02:31 -0500 Message-Id: <20190315050233.10782-7-eblake@redhat.com> In-Reply-To: <20190315050233.10782-1-eblake@redhat.com> References: <20190315050233.10782-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Cc: jtomko@redhat.com, jsnow@redhat.com Subject: [libvirt] [PATCH v6 6/8] snapshot: Use accessors for virDomainSnapshot members X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Fri, 15 Mar 2019 05:02:52 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Upcoming patches want to add virDomainCheckpoint that behaves very similarly to virDomainCheckpoint; the easiest way to share common code is to give both classes a common base class. If this were C++, we'd just use public member inheritance; but since it is C, we instead have to touch EVERY use of member fields that will be relocated. To avoid having to make future edits, wrap the majority of accesses behind static inline functions, so that we only have to touch one place when changing class inheritance; and temporarily rename the members to let the compiler ensure we caught all uses. Signed-off-by: Eric Blake Reviewed-by: J=C3=A1n Tomko --- src/datatypes.h | 22 +++++++--- src/datatypes.c | 10 ++--- src/esx/esx_driver.c | 66 ++++++++++++++--------------- src/libvirt-domain-snapshot.c | 24 +++++------ src/qemu/qemu_driver.c | 40 ++++++++--------- src/remote/remote_daemon_dispatch.c | 4 +- src/remote/remote_driver.c | 4 +- src/rpc/gendispatch.pl | 2 +- src/test/test_driver.c | 20 ++++----- src/vbox/vbox_common.c | 56 ++++++++++++------------ src/vz/vz_driver.c | 52 +++++++++++------------ 11 files changed, 156 insertions(+), 144 deletions(-) diff --git a/src/datatypes.h b/src/datatypes.h index 12015679f3..dcba279bec 100644 --- a/src/datatypes.h +++ b/src/datatypes.h @@ -1,7 +1,7 @@ /* * datatypes.h: management of structs for public data types * - * Copyright (C) 2006-2015 Red Hat, Inc. + * Copyright (C) 2006-2019 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -296,8 +296,8 @@ extern virClassPtr virAdmClientClass; do { \ virDomainSnapshotPtr _snap =3D (obj); \ if (!virObjectIsClass(_snap, virDomainSnapshotClass) || \ - !virObjectIsClass(_snap->domain, virDomainClass) || \ - !virObjectIsClass(_snap->domain->conn, virConnectClass)) { \ + !virObjectIsClass(virSnapDom(_snap), virDomainClass) || \ + !virObjectIsClass(virSnapDom(_snap)->conn, virConnectClass)) {= \ virReportErrorHelper(VIR_FROM_DOMAIN_SNAPSHOT, \ VIR_ERR_INVALID_DOMAIN_SNAPSHOT, \ __FILE__, __FUNCTION__, __LINE__, \ @@ -675,10 +675,22 @@ struct _virStream { */ struct _virDomainSnapshot { virObject parent; - char *name; - virDomainPtr domain; + char *_name; + virDomainPtr _domain; }; +static inline char * +virSnapName(virDomainSnapshotPtr snapshot) +{ + return snapshot->_name; +} + +static inline virDomainPtr +virSnapDom(virDomainSnapshotPtr snapshot) +{ + return snapshot->_domain; +} + /** * _virNWFilter: * diff --git a/src/datatypes.c b/src/datatypes.c index 9b92d892d5..916c259a6e 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -923,10 +923,10 @@ virGetDomainSnapshot(virDomainPtr domain, const char = *name) if (!(ret =3D virObjectNew(virDomainSnapshotClass))) goto error; - if (VIR_STRDUP(ret->name, name) < 0) + if (VIR_STRDUP(ret->_name, name) < 0) goto error; - ret->domain =3D virObjectRef(domain); + ret->_domain =3D virObjectRef(domain); return ret; @@ -950,10 +950,10 @@ static void virDomainSnapshotDispose(void *obj) { virDomainSnapshotPtr snapshot =3D obj; - VIR_DEBUG("release snapshot %p %s", snapshot, snapshot->name); + VIR_DEBUG("release snapshot %p %s", snapshot, snapshot->_name); - VIR_FREE(snapshot->name); - virObjectUnref(snapshot->domain); + VIR_FREE(snapshot->_name); + virObjectUnref(snapshot->_domain); } diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index c6d112268f..c016f8051f 100644 --- a/src/esx/esx_driver.c +++ b/src/esx/esx_driver.c @@ -4166,7 +4166,7 @@ static char * esxDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot, unsigned int flags) { - esxPrivate *priv =3D snapshot->domain->conn->privateData; + esxPrivate *priv =3D virSnapDom(snapshot)->conn->privateData; esxVI_VirtualMachineSnapshotTree *rootSnapshotList =3D NULL; esxVI_VirtualMachineSnapshotTree *snapshotTree =3D NULL; esxVI_VirtualMachineSnapshotTree *snapshotTreeParent =3D NULL; @@ -4181,15 +4181,15 @@ esxDomainSnapshotGetXMLDesc(virDomainSnapshotPtr sn= apshot, if (esxVI_EnsureSession(priv->primary) < 0) return NULL; - if (esxVI_LookupRootSnapshotTreeList(priv->primary, snapshot->domain->= uuid, + if (esxVI_LookupRootSnapshotTreeList(priv->primary, virSnapDom(snapsho= t)->uuid, &rootSnapshotList) < 0 || - esxVI_GetSnapshotTreeByName(rootSnapshotList, snapshot->name, + esxVI_GetSnapshotTreeByName(rootSnapshotList, virSnapName(snapshot= ), &snapshotTree, &snapshotTreeParent, esxVI_Occurrence_RequiredItem) < 0) { goto cleanup; } - def.name =3D snapshot->name; + def.name =3D virSnapName(snapshot); def.description =3D snapshotTree->description; def.parent =3D snapshotTreeParent ? snapshotTreeParent->name : NULL; @@ -4201,7 +4201,7 @@ esxDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snap= shot, def.state =3D esxVI_VirtualMachinePowerState_ConvertToLibvirt (snapshotTree->state); - virUUIDFormat(snapshot->domain->uuid, uuid_string); + virUUIDFormat(virSnapDom(snapshot)->uuid, uuid_string); xml =3D virDomainSnapshotDefFormat(uuid_string, &def, priv->caps, priv= ->xmlopt, 0); @@ -4299,7 +4299,7 @@ static int esxDomainSnapshotNumChildren(virDomainSnapshotPtr snapshot, unsigned int f= lags) { int count =3D -1; - esxPrivate *priv =3D snapshot->domain->conn->privateData; + esxPrivate *priv =3D virSnapDom(snapshot)->conn->privateData; esxVI_VirtualMachineSnapshotTree *rootSnapshotTreeList =3D NULL; esxVI_VirtualMachineSnapshotTree *snapshotTree =3D NULL; bool recurse; @@ -4315,9 +4315,9 @@ esxDomainSnapshotNumChildren(virDomainSnapshotPtr sna= pshot, unsigned int flags) if (esxVI_EnsureSession(priv->primary) < 0) return -1; - if (esxVI_LookupRootSnapshotTreeList(priv->primary, snapshot->domain->= uuid, + if (esxVI_LookupRootSnapshotTreeList(priv->primary, virSnapDom(snapsho= t)->uuid, &rootSnapshotTreeList) < 0 || - esxVI_GetSnapshotTreeByName(rootSnapshotTreeList, snapshot->name, + esxVI_GetSnapshotTreeByName(rootSnapshotTreeList, virSnapName(snap= shot), &snapshotTree, NULL, esxVI_Occurrence_RequiredItem) < 0) { goto cleanup; @@ -4346,7 +4346,7 @@ esxDomainSnapshotListChildrenNames(virDomainSnapshotP= tr snapshot, unsigned int flags) { int result =3D -1; - esxPrivate *priv =3D snapshot->domain->conn->privateData; + esxPrivate *priv =3D virSnapDom(snapshot)->conn->privateData; esxVI_VirtualMachineSnapshotTree *rootSnapshotTreeList =3D NULL; esxVI_VirtualMachineSnapshotTree *snapshotTree =3D NULL; bool recurse; @@ -4370,9 +4370,9 @@ esxDomainSnapshotListChildrenNames(virDomainSnapshotP= tr snapshot, if (esxVI_EnsureSession(priv->primary) < 0) return -1; - if (esxVI_LookupRootSnapshotTreeList(priv->primary, snapshot->domain->= uuid, + if (esxVI_LookupRootSnapshotTreeList(priv->primary, virSnapDom(snapsho= t)->uuid, &rootSnapshotTreeList) < 0 || - esxVI_GetSnapshotTreeByName(rootSnapshotTreeList, snapshot->name, + esxVI_GetSnapshotTreeByName(rootSnapshotTreeList, virSnapName(snap= shot), &snapshotTree, NULL, esxVI_Occurrence_RequiredItem) < 0) { goto cleanup; @@ -4457,7 +4457,7 @@ esxDomainHasCurrentSnapshot(virDomainPtr domain, unsi= gned int flags) static virDomainSnapshotPtr esxDomainSnapshotGetParent(virDomainSnapshotPtr snapshot, unsigned int fla= gs) { - esxPrivate *priv =3D snapshot->domain->conn->privateData; + esxPrivate *priv =3D virSnapDom(snapshot)->conn->privateData; esxVI_VirtualMachineSnapshotTree *rootSnapshotList =3D NULL; esxVI_VirtualMachineSnapshotTree *snapshotTree =3D NULL; esxVI_VirtualMachineSnapshotTree *snapshotTreeParent =3D NULL; @@ -4468,9 +4468,9 @@ esxDomainSnapshotGetParent(virDomainSnapshotPtr snaps= hot, unsigned int flags) if (esxVI_EnsureSession(priv->primary) < 0) return NULL; - if (esxVI_LookupRootSnapshotTreeList(priv->primary, snapshot->domain->= uuid, + if (esxVI_LookupRootSnapshotTreeList(priv->primary, virSnapDom(snapsho= t)->uuid, &rootSnapshotList) < 0 || - esxVI_GetSnapshotTreeByName(rootSnapshotList, snapshot->name, + esxVI_GetSnapshotTreeByName(rootSnapshotList, virSnapName(snapshot= ), &snapshotTree, &snapshotTreeParent, esxVI_Occurrence_RequiredItem) < 0) { goto cleanup; @@ -4483,7 +4483,7 @@ esxDomainSnapshotGetParent(virDomainSnapshotPtr snaps= hot, unsigned int flags) goto cleanup; } - parent =3D virGetDomainSnapshot(snapshot->domain, snapshotTreeParent->= name); + parent =3D virGetDomainSnapshot(virSnapDom(snapshot), snapshotTreePare= nt->name); cleanup: esxVI_VirtualMachineSnapshotTree_Free(&rootSnapshotList); @@ -4522,7 +4522,7 @@ esxDomainSnapshotCurrent(virDomainPtr domain, unsigne= d int flags) static int esxDomainSnapshotIsCurrent(virDomainSnapshotPtr snapshot, unsigned int fla= gs) { - esxPrivate *priv =3D snapshot->domain->conn->privateData; + esxPrivate *priv =3D virSnapDom(snapshot)->conn->privateData; esxVI_VirtualMachineSnapshotTree *currentSnapshotTree =3D NULL; esxVI_VirtualMachineSnapshotTree *rootSnapshotList =3D NULL; esxVI_VirtualMachineSnapshotTree *snapshotTree =3D NULL; @@ -4534,21 +4534,21 @@ esxDomainSnapshotIsCurrent(virDomainSnapshotPtr sna= pshot, unsigned int flags) return -1; /* Check that snapshot exists. */ - if (esxVI_LookupRootSnapshotTreeList(priv->primary, snapshot->domain->= uuid, + if (esxVI_LookupRootSnapshotTreeList(priv->primary, virSnapDom(snapsho= t)->uuid, &rootSnapshotList) < 0 || - esxVI_GetSnapshotTreeByName(rootSnapshotList, snapshot->name, + esxVI_GetSnapshotTreeByName(rootSnapshotList, virSnapName(snapshot= ), &snapshotTree, NULL, esxVI_Occurrence_RequiredItem) < 0) { goto cleanup; } - if (esxVI_LookupCurrentSnapshotTree(priv->primary, snapshot->domain->u= uid, + if (esxVI_LookupCurrentSnapshotTree(priv->primary, virSnapDom(snapshot= )->uuid, ¤tSnapshotTree, esxVI_Occurrence_RequiredItem) < 0= ) { goto cleanup; } - ret =3D STREQ(snapshot->name, currentSnapshotTree->name); + ret =3D STREQ(virSnapName(snapshot), currentSnapshotTree->name); cleanup: esxVI_VirtualMachineSnapshotTree_Free(¤tSnapshotTree); @@ -4560,7 +4560,7 @@ esxDomainSnapshotIsCurrent(virDomainSnapshotPtr snaps= hot, unsigned int flags) static int esxDomainSnapshotHasMetadata(virDomainSnapshotPtr snapshot, unsigned int f= lags) { - esxPrivate *priv =3D snapshot->domain->conn->privateData; + esxPrivate *priv =3D virSnapDom(snapshot)->conn->privateData; esxVI_VirtualMachineSnapshotTree *rootSnapshotList =3D NULL; esxVI_VirtualMachineSnapshotTree *snapshotTree =3D NULL; int ret =3D -1; @@ -4571,9 +4571,9 @@ esxDomainSnapshotHasMetadata(virDomainSnapshotPtr sna= pshot, unsigned int flags) return -1; /* Check that snapshot exists. If so, there is no metadata. */ - if (esxVI_LookupRootSnapshotTreeList(priv->primary, snapshot->domain->= uuid, + if (esxVI_LookupRootSnapshotTreeList(priv->primary, virSnapDom(snapsho= t)->uuid, &rootSnapshotList) < 0 || - esxVI_GetSnapshotTreeByName(rootSnapshotList, snapshot->name, + esxVI_GetSnapshotTreeByName(rootSnapshotList, virSnapName(snapshot= ), &snapshotTree, NULL, esxVI_Occurrence_RequiredItem) < 0) { goto cleanup; @@ -4591,7 +4591,7 @@ static int esxDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, unsigned int flag= s) { int result =3D -1; - esxPrivate *priv =3D snapshot->domain->conn->privateData; + esxPrivate *priv =3D virSnapDom(snapshot)->conn->privateData; esxVI_VirtualMachineSnapshotTree *rootSnapshotList =3D NULL; esxVI_VirtualMachineSnapshotTree *snapshotTree =3D NULL; esxVI_ManagedObjectReference *task =3D NULL; @@ -4603,9 +4603,9 @@ esxDomainRevertToSnapshot(virDomainSnapshotPtr snapsh= ot, unsigned int flags) if (esxVI_EnsureSession(priv->primary) < 0) return -1; - if (esxVI_LookupRootSnapshotTreeList(priv->primary, snapshot->domain->= uuid, + if (esxVI_LookupRootSnapshotTreeList(priv->primary, virSnapDom(snapsho= t)->uuid, &rootSnapshotList) < 0 || - esxVI_GetSnapshotTreeByName(rootSnapshotList, snapshot->name, + esxVI_GetSnapshotTreeByName(rootSnapshotList, virSnapName(snapshot= ), &snapshotTree, NULL, esxVI_Occurrence_RequiredItem) < 0) { goto cleanup; @@ -4613,7 +4613,7 @@ esxDomainRevertToSnapshot(virDomainSnapshotPtr snapsh= ot, unsigned int flags) if (esxVI_RevertToSnapshot_Task(priv->primary, snapshotTree->snapshot,= NULL, esxVI_Boolean_Undefined, &task) < 0 || - esxVI_WaitForTaskCompletion(priv->primary, task, snapshot->domain-= >uuid, + esxVI_WaitForTaskCompletion(priv->primary, task, virSnapDom(snapsh= ot)->uuid, esxVI_Occurrence_RequiredItem, priv->parsedUri->autoAnswer, &taskInfo= State, &taskInfoErrorMessage) < 0) { @@ -4622,7 +4622,7 @@ esxDomainRevertToSnapshot(virDomainSnapshotPtr snapsh= ot, unsigned int flags) if (taskInfoState !=3D esxVI_TaskInfoState_Success) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not revert to snapshot '%s': %s"), snapsho= t->name, + _("Could not revert to snapshot '%s': %s"), virSnap= Name(snapshot), taskInfoErrorMessage); goto cleanup; } @@ -4643,7 +4643,7 @@ static int esxDomainSnapshotDelete(virDomainSnapshotPtr snapshot, unsigned int flags) { int result =3D -1; - esxPrivate *priv =3D snapshot->domain->conn->privateData; + esxPrivate *priv =3D virSnapDom(snapshot)->conn->privateData; esxVI_VirtualMachineSnapshotTree *rootSnapshotList =3D NULL; esxVI_VirtualMachineSnapshotTree *snapshotTree =3D NULL; esxVI_Boolean removeChildren =3D esxVI_Boolean_False; @@ -4660,9 +4660,9 @@ esxDomainSnapshotDelete(virDomainSnapshotPtr snapshot= , unsigned int flags) if (flags & VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN) removeChildren =3D esxVI_Boolean_True; - if (esxVI_LookupRootSnapshotTreeList(priv->primary, snapshot->domain->= uuid, + if (esxVI_LookupRootSnapshotTreeList(priv->primary, virSnapDom(snapsho= t)->uuid, &rootSnapshotList) < 0 || - esxVI_GetSnapshotTreeByName(rootSnapshotList, snapshot->name, + esxVI_GetSnapshotTreeByName(rootSnapshotList, virSnapName(snapshot= ), &snapshotTree, NULL, esxVI_Occurrence_RequiredItem) < 0) { goto cleanup; @@ -4677,7 +4677,7 @@ esxDomainSnapshotDelete(virDomainSnapshotPtr snapshot= , unsigned int flags) if (esxVI_RemoveSnapshot_Task(priv->primary, snapshotTree->snapshot, removeChildren, &task) < 0 || - esxVI_WaitForTaskCompletion(priv->primary, task, snapshot->domain-= >uuid, + esxVI_WaitForTaskCompletion(priv->primary, task, virSnapDom(snapsh= ot)->uuid, esxVI_Occurrence_RequiredItem, priv->parsedUri->autoAnswer, &taskInfo= State, &taskInfoErrorMessage) < 0) { @@ -4686,7 +4686,7 @@ esxDomainSnapshotDelete(virDomainSnapshotPtr snapshot= , unsigned int flags) if (taskInfoState !=3D esxVI_TaskInfoState_Success) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("Could not delete snapshot '%s': %s"), snapshot->= name, + _("Could not delete snapshot '%s': %s"), virSnapNam= e(snapshot), taskInfoErrorMessage); goto cleanup; } diff --git a/src/libvirt-domain-snapshot.c b/src/libvirt-domain-snapshot.c index be9bf71af9..e1275c69b0 100644 --- a/src/libvirt-domain-snapshot.c +++ b/src/libvirt-domain-snapshot.c @@ -45,7 +45,7 @@ virDomainSnapshotGetName(virDomainSnapshotPtr snapshot) virCheckDomainSnapshotReturn(snapshot, NULL); - return snapshot->name; + return virSnapName(snapshot); } @@ -68,7 +68,7 @@ virDomainSnapshotGetDomain(virDomainSnapshotPtr snapshot) virCheckDomainSnapshotReturn(snapshot, NULL); - return snapshot->domain; + return virSnapDom(snapshot); } @@ -91,7 +91,7 @@ virDomainSnapshotGetConnect(virDomainSnapshotPtr snapshot) virCheckDomainSnapshotReturn(snapshot, NULL); - return snapshot->domain->conn; + return virSnapDom(snapshot)->conn; } @@ -273,7 +273,7 @@ virDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapsh= ot, virResetLastError(); virCheckDomainSnapshotReturn(snapshot, NULL); - conn =3D snapshot->domain->conn; + conn =3D virSnapDom(snapshot)->conn; if ((conn->flags & VIR_CONNECT_RO) && (flags & VIR_DOMAIN_SNAPSHOT_XML_SECURE)) { @@ -606,7 +606,7 @@ virDomainSnapshotNumChildren(virDomainSnapshotPtr snaps= hot, unsigned int flags) virResetLastError(); virCheckDomainSnapshotReturn(snapshot, -1); - conn =3D snapshot->domain->conn; + conn =3D virSnapDom(snapshot)->conn; if (conn->driver->domainSnapshotNumChildren) { int ret =3D conn->driver->domainSnapshotNumChildren(snapshot, flag= s); @@ -700,7 +700,7 @@ virDomainSnapshotListChildrenNames(virDomainSnapshotPtr= snapshot, virResetLastError(); virCheckDomainSnapshotReturn(snapshot, -1); - conn =3D snapshot->domain->conn; + conn =3D virSnapDom(snapshot)->conn; virCheckNonNullArgGoto(names, error); virCheckNonNegativeArgGoto(nameslen, error); @@ -796,7 +796,7 @@ virDomainSnapshotListAllChildren(virDomainSnapshotPtr s= napshot, *snaps =3D NULL; virCheckDomainSnapshotReturn(snapshot, -1); - conn =3D snapshot->domain->conn; + conn =3D virSnapDom(snapshot)->conn; if (conn->driver->domainSnapshotListAllChildren) { int ret =3D conn->driver->domainSnapshotListAllChildren(snapshot, = snaps, @@ -958,7 +958,7 @@ virDomainSnapshotGetParent(virDomainSnapshotPtr snapsho= t, virResetLastError(); virCheckDomainSnapshotReturn(snapshot, NULL); - conn =3D snapshot->domain->conn; + conn =3D virSnapDom(snapshot)->conn; if (conn->driver->domainSnapshotGetParent) { virDomainSnapshotPtr snap; @@ -996,7 +996,7 @@ virDomainSnapshotIsCurrent(virDomainSnapshotPtr snapsho= t, virResetLastError(); virCheckDomainSnapshotReturn(snapshot, -1); - conn =3D snapshot->domain->conn; + conn =3D virSnapDom(snapshot)->conn; if (conn->driver->domainSnapshotIsCurrent) { int ret; @@ -1035,7 +1035,7 @@ virDomainSnapshotHasMetadata(virDomainSnapshotPtr sna= pshot, virResetLastError(); virCheckDomainSnapshotReturn(snapshot, -1); - conn =3D snapshot->domain->conn; + conn =3D virSnapDom(snapshot)->conn; if (conn->driver->domainSnapshotHasMetadata) { int ret; @@ -1106,7 +1106,7 @@ virDomainRevertToSnapshot(virDomainSnapshotPtr snapsh= ot, virResetLastError(); virCheckDomainSnapshotReturn(snapshot, -1); - conn =3D snapshot->domain->conn; + conn =3D virSnapDom(snapshot)->conn; virCheckReadOnlyGoto(conn->flags, error); @@ -1163,7 +1163,7 @@ virDomainSnapshotDelete(virDomainSnapshotPtr snapshot, virResetLastError(); virCheckDomainSnapshotReturn(snapshot, -1); - conn =3D snapshot->domain->conn; + conn =3D virSnapDom(snapshot)->conn; virCheckReadOnlyGoto(conn->flags, error); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 75b5b26bca..31859c20c8 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -193,7 +193,7 @@ qemuDomObjFromDomain(virDomainPtr domain) static virDomainObjPtr qemuDomObjFromSnapshot(virDomainSnapshotPtr snapshot) { - return qemuDomObjFromDomain(snapshot->domain); + return qemuDomObjFromDomain(virSnapDom(snapshot)); } @@ -218,7 +218,7 @@ static virDomainSnapshotObjPtr qemuSnapObjFromSnapshot(virDomainObjPtr vm, virDomainSnapshotPtr snapshot) { - return qemuSnapObjFromName(vm, snapshot->name); + return qemuSnapObjFromName(vm, virSnapName(snapshot)); } static int @@ -16059,7 +16059,7 @@ qemuDomainSnapshotListChildrenNames(virDomainSnapsh= otPtr snapshot, if (!(vm =3D qemuDomObjFromSnapshot(snapshot))) return -1; - if (virDomainSnapshotListChildrenNamesEnsureACL(snapshot->domain->conn= , vm->def) < 0) + if (virDomainSnapshotListChildrenNamesEnsureACL(virSnapDom(snapshot)->= conn, vm->def) < 0) goto cleanup; if (!(snap =3D qemuSnapObjFromSnapshot(vm, snapshot))) @@ -16089,7 +16089,7 @@ qemuDomainSnapshotNumChildren(virDomainSnapshotPtr = snapshot, if (!(vm =3D qemuDomObjFromSnapshot(snapshot))) return -1; - if (virDomainSnapshotNumChildrenEnsureACL(snapshot->domain->conn, vm->= def) < 0) + if (virDomainSnapshotNumChildrenEnsureACL(virSnapDom(snapshot)->conn, = vm->def) < 0) goto cleanup; if (!(snap =3D qemuSnapObjFromSnapshot(vm, snapshot))) @@ -16119,13 +16119,13 @@ qemuDomainSnapshotListAllChildren(virDomainSnapsh= otPtr snapshot, if (!(vm =3D qemuDomObjFromSnapshot(snapshot))) return -1; - if (virDomainSnapshotListAllChildrenEnsureACL(snapshot->domain->conn, = vm->def) < 0) + if (virDomainSnapshotListAllChildrenEnsureACL(virSnapDom(snapshot)->co= nn, vm->def) < 0) goto cleanup; if (!(snap =3D qemuSnapObjFromSnapshot(vm, snapshot))) goto cleanup; - n =3D virDomainListSnapshots(vm->snapshots, snap, snapshot->domain, sn= aps, + n =3D virDomainListSnapshots(vm->snapshots, snap, virSnapDom(snapshot)= , snaps, flags); cleanup: @@ -16198,7 +16198,7 @@ qemuDomainSnapshotGetParent(virDomainSnapshotPtr sn= apshot, if (!(vm =3D qemuDomObjFromSnapshot(snapshot))) return NULL; - if (virDomainSnapshotGetParentEnsureACL(snapshot->domain->conn, vm->de= f) < 0) + if (virDomainSnapshotGetParentEnsureACL(virSnapDom(snapshot)->conn, vm= ->def) < 0) goto cleanup; if (!(snap =3D qemuSnapObjFromSnapshot(vm, snapshot))) @@ -16211,7 +16211,7 @@ qemuDomainSnapshotGetParent(virDomainSnapshotPtr sn= apshot, goto cleanup; } - parent =3D virGetDomainSnapshot(snapshot->domain, snap->def->parent); + parent =3D virGetDomainSnapshot(virSnapDom(snapshot), snap->def->paren= t); cleanup: virDomainObjEndAPI(&vm); @@ -16252,7 +16252,7 @@ static char * qemuDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot, unsigned int flags) { - virQEMUDriverPtr driver =3D snapshot->domain->conn->privateData; + virQEMUDriverPtr driver =3D virSnapDom(snapshot)->conn->privateData; virDomainObjPtr vm =3D NULL; char *xml =3D NULL; virDomainSnapshotObjPtr snap =3D NULL; @@ -16263,13 +16263,13 @@ qemuDomainSnapshotGetXMLDesc(virDomainSnapshotPtr= snapshot, if (!(vm =3D qemuDomObjFromSnapshot(snapshot))) return NULL; - if (virDomainSnapshotGetXMLDescEnsureACL(snapshot->domain->conn, vm->d= ef, flags) < 0) + if (virDomainSnapshotGetXMLDescEnsureACL(virSnapDom(snapshot)->conn, v= m->def, flags) < 0) goto cleanup; if (!(snap =3D qemuSnapObjFromSnapshot(vm, snapshot))) goto cleanup; - virUUIDFormat(snapshot->domain->uuid, uuidstr); + virUUIDFormat(virSnapDom(snapshot)->uuid, uuidstr); xml =3D virDomainSnapshotDefFormat(uuidstr, snap->def, driver->caps, driver->xmlopt, @@ -16294,14 +16294,14 @@ qemuDomainSnapshotIsCurrent(virDomainSnapshotPtr = snapshot, if (!(vm =3D qemuDomObjFromSnapshot(snapshot))) return -1; - if (virDomainSnapshotIsCurrentEnsureACL(snapshot->domain->conn, vm->de= f) < 0) + if (virDomainSnapshotIsCurrentEnsureACL(virSnapDom(snapshot)->conn, vm= ->def) < 0) goto cleanup; if (!(snap =3D qemuSnapObjFromSnapshot(vm, snapshot))) goto cleanup; ret =3D (vm->current_snapshot && - STREQ(snapshot->name, vm->current_snapshot->def->name)); + STREQ(virSnapName(snapshot), vm->current_snapshot->def->name)); cleanup: virDomainObjEndAPI(&vm); @@ -16322,7 +16322,7 @@ qemuDomainSnapshotHasMetadata(virDomainSnapshotPtr = snapshot, if (!(vm =3D qemuDomObjFromSnapshot(snapshot))) return -1; - if (virDomainSnapshotHasMetadataEnsureACL(snapshot->domain->conn, vm->= def) < 0) + if (virDomainSnapshotHasMetadataEnsureACL(virSnapDom(snapshot)->conn, = vm->def) < 0) goto cleanup; if (!(snap =3D qemuSnapObjFromSnapshot(vm, snapshot))) @@ -16355,7 +16355,7 @@ static int qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, unsigned int flags) { - virQEMUDriverPtr driver =3D snapshot->domain->conn->privateData; + virQEMUDriverPtr driver =3D virSnapDom(snapshot)->conn->privateData; virDomainObjPtr vm =3D NULL; int ret =3D -1; virDomainSnapshotObjPtr snap =3D NULL; @@ -16398,7 +16398,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr sna= pshot, cfg =3D virQEMUDriverGetConfig(driver); - if (virDomainRevertToSnapshotEnsureACL(snapshot->domain->conn, vm->def= ) < 0) + if (virDomainRevertToSnapshotEnsureACL(virSnapDom(snapshot)->conn, vm-= >def) < 0) goto cleanup; if (!(caps =3D virQEMUDriverGetCapabilities(driver, false))) @@ -16605,7 +16605,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr sna= pshot, qemuDomainFixupCPUs(vm, &cookie->cpu) < 0) goto cleanup; - rc =3D qemuProcessStart(snapshot->domain->conn, driver, vm, + rc =3D qemuProcessStart(virSnapDom(snapshot)->conn, driver, vm, cookie ? cookie->cpu : NULL, jobType, NULL, -1, NULL, snap, VIR_NETDEV_VPORT_PROFILE_OP_CREATE, @@ -16693,7 +16693,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr sna= pshot, start_flags |=3D paused ? VIR_QEMU_PROCESS_START_PAUSED : 0; virObjectEventStateQueue(driver->domainEventState, event); - rc =3D qemuProcessStart(snapshot->domain->conn, driver, vm, NU= LL, + rc =3D qemuProcessStart(virSnapDom(snapshot)->conn, driver, vm= , NULL, QEMU_ASYNC_JOB_START, NULL, -1, NULL, NU= LL, VIR_NETDEV_VPORT_PROFILE_OP_CREATE, start_flags); @@ -16818,7 +16818,7 @@ static int qemuDomainSnapshotDelete(virDomainSnapshotPtr snapshot, unsigned int flags) { - virQEMUDriverPtr driver =3D snapshot->domain->conn->privateData; + virQEMUDriverPtr driver =3D virSnapDom(snapshot)->conn->privateData; virDomainObjPtr vm =3D NULL; int ret =3D -1; virDomainSnapshotObjPtr snap =3D NULL; @@ -16837,7 +16837,7 @@ qemuDomainSnapshotDelete(virDomainSnapshotPtr snaps= hot, cfg =3D virQEMUDriverGetConfig(driver); - if (virDomainSnapshotDeleteEnsureACL(snapshot->domain->conn, vm->def) = < 0) + if (virDomainSnapshotDeleteEnsureACL(virSnapDom(snapshot)->conn, vm->d= ef) < 0) goto cleanup; if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0) diff --git a/src/remote/remote_daemon_dispatch.c b/src/remote/remote_daemon= _dispatch.c index df28259042..49721536d0 100644 --- a/src/remote/remote_daemon_dispatch.c +++ b/src/remote/remote_daemon_dispatch.c @@ -7351,9 +7351,9 @@ make_nonnull_nwfilter_binding(remote_nonnull_nwfilter= _binding *binding_dst, virN static int make_nonnull_domain_snapshot(remote_nonnull_domain_snapshot *snapshot_dst,= virDomainSnapshotPtr snapshot_src) { - if (VIR_STRDUP(snapshot_dst->name, snapshot_src->name) < 0) + if (VIR_STRDUP(snapshot_dst->name, virSnapName(snapshot_src)) < 0) return -1; - if (make_nonnull_domain(&snapshot_dst->dom, snapshot_src->domain) < 0)= { + if (make_nonnull_domain(&snapshot_dst->dom, virSnapDom(snapshot_src)) = < 0) { VIR_FREE(snapshot_dst->name); return -1; } diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 5c4dd41227..f67ea1132c 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -8270,8 +8270,8 @@ make_nonnull_nwfilter_binding(remote_nonnull_nwfilter= _binding *binding_dst, virN static void make_nonnull_domain_snapshot(remote_nonnull_domain_snapshot *snapshot_dst,= virDomainSnapshotPtr snapshot_src) { - snapshot_dst->name =3D snapshot_src->name; - make_nonnull_domain(&snapshot_dst->dom, snapshot_src->domain); + snapshot_dst->name =3D virSnapName(snapshot_src); + make_nonnull_domain(&snapshot_dst->dom, virSnapDom(snapshot_src)); } /*----------------------------------------------------------------------*/ diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl index ae3a42c4c1..985eb995aa 100755 --- a/src/rpc/gendispatch.pl +++ b/src/rpc/gendispatch.pl @@ -1335,7 +1335,7 @@ elsif ($mode eq "client") { if ($is_first_arg) { if ($name eq "domain_snapshot") { - $priv_src =3D "$arg_name->domain->conn"; + $priv_src =3D "virSnapDom($arg_name)->conn"; } else { $priv_src =3D "$arg_name->conn"; } diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 4d49c987b5..8583a19208 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -5945,13 +5945,13 @@ static virDomainSnapshotObjPtr testSnapObjFromSnapshot(virDomainObjPtr vm, virDomainSnapshotPtr snapshot) { - return testSnapObjFromName(vm, snapshot->name); + return testSnapObjFromName(vm, virSnapName(snapshot)); } static virDomainObjPtr testDomObjFromSnapshot(virDomainSnapshotPtr snapshot) { - return testDomObjFromDomain(snapshot->domain); + return testDomObjFromDomain(virSnapDom(snapshot)); } static int @@ -6089,7 +6089,7 @@ testDomainSnapshotListAllChildren(virDomainSnapshotPt= r snapshot, if (!(snap =3D testSnapObjFromSnapshot(vm, snapshot))) goto cleanup; - n =3D virDomainListSnapshots(vm->snapshots, snap, snapshot->domain, sn= aps, + n =3D virDomainListSnapshots(vm->snapshots, snap, virSnapDom(snapshot)= , snaps, flags); cleanup: @@ -6162,7 +6162,7 @@ testDomainSnapshotGetParent(virDomainSnapshotPtr snap= shot, goto cleanup; } - parent =3D virGetDomainSnapshot(snapshot->domain, snap->def->parent); + parent =3D virGetDomainSnapshot(virSnapDom(snapshot), snap->def->paren= t); cleanup: virDomainObjEndAPI(&vm); @@ -6202,7 +6202,7 @@ testDomainSnapshotGetXMLDesc(virDomainSnapshotPtr sna= pshot, char *xml =3D NULL; virDomainSnapshotObjPtr snap =3D NULL; char uuidstr[VIR_UUID_STRING_BUFLEN]; - testDriverPtr privconn =3D snapshot->domain->conn->privateData; + testDriverPtr privconn =3D virSnapDom(snapshot)->conn->privateData; virCheckFlags(VIR_DOMAIN_SNAPSHOT_XML_SECURE, NULL); @@ -6212,7 +6212,7 @@ testDomainSnapshotGetXMLDesc(virDomainSnapshotPtr sna= pshot, if (!(snap =3D testSnapObjFromSnapshot(vm, snapshot))) goto cleanup; - virUUIDFormat(snapshot->domain->uuid, uuidstr); + virUUIDFormat(virSnapDom(snapshot)->uuid, uuidstr); xml =3D virDomainSnapshotDefFormat(uuidstr, snap->def, privconn->caps, privconn->xmlopt, @@ -6236,7 +6236,7 @@ testDomainSnapshotIsCurrent(virDomainSnapshotPtr snap= shot, return -1; ret =3D (vm->current_snapshot && - STREQ(snapshot->name, vm->current_snapshot->def->name)); + STREQ(virSnapName(snapshot), vm->current_snapshot->def->name)); virDomainObjEndAPI(&vm); return ret; @@ -6545,7 +6545,7 @@ static int testDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, unsigned int flags) { - testDriverPtr privconn =3D snapshot->domain->conn->privateData; + testDriverPtr privconn =3D virSnapDom(snapshot)->conn->privateData; virDomainObjPtr vm =3D NULL; virDomainSnapshotObjPtr snap =3D NULL; virObjectEventPtr event =3D NULL; @@ -6640,7 +6640,7 @@ testDomainRevertToSnapshot(virDomainSnapshotPtr snaps= hot, } virResetError(err); - testDomainShutdownState(snapshot->domain, vm, + testDomainShutdownState(virSnapDom(snapshot), vm, VIR_DOMAIN_SHUTOFF_FROM_SNAPSHOT); event =3D virDomainEventLifecycleNewFromObj(vm, VIR_DOMAIN_EVENT_STOPPED, @@ -6712,7 +6712,7 @@ testDomainRevertToSnapshot(virDomainSnapshotPtr snaps= hot, if (virDomainObjIsActive(vm)) { /* Transitions 4, 7 */ - testDomainShutdownState(snapshot->domain, vm, + testDomainShutdownState(virSnapDom(snapshot), vm, VIR_DOMAIN_SHUTOFF_FROM_SNAPSHOT); event =3D virDomainEventLifecycleNewFromObj(vm, VIR_DOMAIN_EVENT_STOPPED, diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index b8dfb55ef4..49c7e8a27d 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -5732,7 +5732,7 @@ static int vboxSnapshotGetReadWriteDisks(virDomainSnapshotDefPtr def, virDomainSnapshotPtr snapshot) { - virDomainPtr dom =3D snapshot->domain; + virDomainPtr dom =3D virSnapDom(snapshot); vboxDriverPtr data =3D dom->conn->privateData; vboxIID domiid; IMachine *machine =3D NULL; @@ -5756,7 +5756,7 @@ vboxSnapshotGetReadWriteDisks(virDomainSnapshotDefPtr= def, if (openSessionForMachine(data, dom->uuid, &domiid, &machine) < 0) goto cleanup; - if (!(snap =3D vboxDomainSnapshotGet(data, dom, machine, snapshot->nam= e))) + if (!(snap =3D vboxDomainSnapshotGet(data, dom, machine, virSnapName(s= napshot)))) goto cleanup; rc =3D gVBoxAPI.UISnapshot.GetId(snap, &snapIid); @@ -5972,7 +5972,7 @@ static int vboxSnapshotGetReadOnlyDisks(virDomainSnapshotDefPtr def, virDomainSnapshotPtr snapshot) { - virDomainPtr dom =3D snapshot->domain; + virDomainPtr dom =3D virSnapDom(snapshot); vboxDriverPtr data =3D dom->conn->privateData; vboxIID domiid; ISnapshot *snap =3D NULL; @@ -5994,7 +5994,7 @@ vboxSnapshotGetReadOnlyDisks(virDomainSnapshotDefPtr = def, if (openSessionForMachine(data, dom->uuid, &domiid, &machine) < 0) goto cleanup; - if (!(snap =3D vboxDomainSnapshotGet(data, dom, machine, snapshot->nam= e))) + if (!(snap =3D vboxDomainSnapshotGet(data, dom, machine, virSnapName(s= napshot)))) goto cleanup; rc =3D gVBoxAPI.UISnapshot.GetMachine(snap, &snapMachine); @@ -6195,7 +6195,7 @@ vboxSnapshotGetReadOnlyDisks(virDomainSnapshotDefPtr = def, static char *vboxDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot, unsigned int flags) { - virDomainPtr dom =3D snapshot->domain; + virDomainPtr dom =3D virSnapDom(snapshot); vboxDriverPtr data =3D dom->conn->privateData; vboxIID domiid; IMachine *machine =3D NULL; @@ -6218,12 +6218,12 @@ static char *vboxDomainSnapshotGetXMLDesc(virDomain= SnapshotPtr snapshot, if (openSessionForMachine(data, dom->uuid, &domiid, &machine) < 0) goto cleanup; - if (!(snap =3D vboxDomainSnapshotGet(data, dom, machine, snapshot->nam= e))) + if (!(snap =3D vboxDomainSnapshotGet(data, dom, machine, virSnapName(s= napshot)))) goto cleanup; if (VIR_ALLOC(def) < 0 || !(def->dom =3D virDomainDefNew())) goto cleanup; - if (VIR_STRDUP(def->name, snapshot->name) < 0) + if (VIR_STRDUP(def->name, virSnapName(snapshot)) < 0) goto cleanup; if (gVBoxAPI.vboxSnapshotRedefine) { @@ -6265,7 +6265,7 @@ static char *vboxDomainSnapshotGetXMLDesc(virDomainSn= apshotPtr snapshot, if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("could not get description of snapshot %s"), - snapshot->name); + virSnapName(snapshot)); goto cleanup; } if (str16) { @@ -6282,7 +6282,7 @@ static char *vboxDomainSnapshotGetXMLDesc(virDomainSn= apshotPtr snapshot, if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("could not get creation time of snapshot %s"), - snapshot->name); + virSnapName(snapshot)); goto cleanup; } /* timestamp is in milliseconds while creationTime in seconds */ @@ -6292,7 +6292,7 @@ static char *vboxDomainSnapshotGetXMLDesc(virDomainSn= apshotPtr snapshot, if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("could not get parent of snapshot %s"), - snapshot->name); + virSnapName(snapshot)); goto cleanup; } if (parent) { @@ -6300,7 +6300,7 @@ static char *vboxDomainSnapshotGetXMLDesc(virDomainSn= apshotPtr snapshot, if (NS_FAILED(rc) || !str16) { virReportError(VIR_ERR_INTERNAL_ERROR, _("could not get name of parent of snapshot %s"= ), - snapshot->name); + virSnapName(snapshot)); goto cleanup; } VBOX_UTF16_TO_UTF8(str16, &str8); @@ -6316,7 +6316,7 @@ static char *vboxDomainSnapshotGetXMLDesc(virDomainSn= apshotPtr snapshot, if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("could not get online state of snapshot %s"), - snapshot->name); + virSnapName(snapshot)); goto cleanup; } if (online) @@ -6531,7 +6531,7 @@ static virDomainSnapshotPtr vboxDomainSnapshotGetParent(virDomainSnapshotPtr snapshot, unsigned int flags) { - virDomainPtr dom =3D snapshot->domain; + virDomainPtr dom =3D virSnapDom(snapshot); vboxDriverPtr data =3D dom->conn->privateData; vboxIID iid; IMachine *machine =3D NULL; @@ -6550,20 +6550,20 @@ vboxDomainSnapshotGetParent(virDomainSnapshotPtr sn= apshot, if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; - if (!(snap =3D vboxDomainSnapshotGet(data, dom, machine, snapshot->nam= e))) + if (!(snap =3D vboxDomainSnapshotGet(data, dom, machine, virSnapName(s= napshot)))) goto cleanup; rc =3D gVBoxAPI.UISnapshot.GetParent(snap, &parent); if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("could not get parent of snapshot %s"), - snapshot->name); + virSnapName(snapshot)); goto cleanup; } if (!parent) { virReportError(VIR_ERR_NO_DOMAIN_SNAPSHOT, _("snapshot '%s' does not have a parent"), - snapshot->name); + virSnapName(snapshot)); goto cleanup; } @@ -6571,7 +6571,7 @@ vboxDomainSnapshotGetParent(virDomainSnapshotPtr snap= shot, if (NS_FAILED(rc) || !nameUtf16) { virReportError(VIR_ERR_INTERNAL_ERROR, _("could not get name of parent of snapshot %s"), - snapshot->name); + virSnapName(snapshot)); goto cleanup; } VBOX_UTF16_TO_UTF8(nameUtf16, &name); @@ -6652,7 +6652,7 @@ vboxDomainSnapshotCurrent(virDomainPtr dom, unsigned = int flags) static int vboxDomainSnapshotIsCurrent(virDomainSnapshotPtr snapshot, unsigned int flags) { - virDomainPtr dom =3D snapshot->domain; + virDomainPtr dom =3D virSnapDom(snapshot); vboxDriverPtr data =3D dom->conn->privateData; vboxIID iid; IMachine *machine =3D NULL; @@ -6671,7 +6671,7 @@ static int vboxDomainSnapshotIsCurrent(virDomainSnaps= hotPtr snapshot, if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0) goto cleanup; - if (!(snap =3D vboxDomainSnapshotGet(data, dom, machine, snapshot->nam= e))) + if (!(snap =3D vboxDomainSnapshotGet(data, dom, machine, virSnapName(s= napshot)))) goto cleanup; rc =3D gVBoxAPI.UIMachine.GetCurrentSnapshot(machine, ¤t); @@ -6698,7 +6698,7 @@ static int vboxDomainSnapshotIsCurrent(virDomainSnaps= hotPtr snapshot, goto cleanup; } - ret =3D STREQ(snapshot->name, name); + ret =3D STREQ(virSnapName(snapshot), name); cleanup: VBOX_UTF8_FREE(name); @@ -6713,7 +6713,7 @@ static int vboxDomainSnapshotIsCurrent(virDomainSnaps= hotPtr snapshot, static int vboxDomainSnapshotHasMetadata(virDomainSnapshotPtr snapshot, unsigned int flags) { - virDomainPtr dom =3D snapshot->domain; + virDomainPtr dom =3D virSnapDom(snapshot); vboxDriverPtr data =3D dom->conn->privateData; vboxIID iid; IMachine *machine =3D NULL; @@ -6729,7 +6729,7 @@ static int vboxDomainSnapshotHasMetadata(virDomainSna= pshotPtr snapshot, goto cleanup; /* Check that snapshot exists. If so, there is no metadata. */ - if (!(snap =3D vboxDomainSnapshotGet(data, dom, machine, snapshot->nam= e))) + if (!(snap =3D vboxDomainSnapshotGet(data, dom, machine, virSnapName(s= napshot)))) goto cleanup; ret =3D 0; @@ -6744,7 +6744,7 @@ static int vboxDomainSnapshotHasMetadata(virDomainSna= pshotPtr snapshot, static int vboxDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, unsigned int flags) { - virDomainPtr dom =3D snapshot->domain; + virDomainPtr dom =3D virSnapDom(snapshot); vboxDriverPtr data =3D dom->conn->privateData; vboxIID domiid; IMachine *machine =3D NULL; @@ -6763,7 +6763,7 @@ static int vboxDomainRevertToSnapshot(virDomainSnapsh= otPtr snapshot, if (openSessionForMachine(data, dom->uuid, &domiid, &machine) < 0) goto cleanup; - newSnapshot =3D vboxDomainSnapshotGet(data, dom, machine, snapshot->na= me); + newSnapshot =3D vboxDomainSnapshotGet(data, dom, machine, virSnapName(= snapshot)); if (!newSnapshot) goto cleanup; @@ -6771,7 +6771,7 @@ static int vboxDomainRevertToSnapshot(virDomainSnapsh= otPtr snapshot, if (NS_FAILED(rc)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("could not get online state of snapshot %s"), - snapshot->name); + virSnapName(snapshot)); goto cleanup; } @@ -6908,7 +6908,7 @@ vboxDomainSnapshotDeleteMetadataOnly(virDomainSnapsho= tPtr snapshot) * the machine with the new file. */ - virDomainPtr dom =3D snapshot->domain; + virDomainPtr dom =3D virSnapDom(snapshot); vboxDriverPtr data =3D dom->conn->privateData; virDomainSnapshotDefPtr def =3D NULL; char *defXml =3D NULL; @@ -7345,7 +7345,7 @@ vboxDomainSnapshotDeleteMetadataOnly(virDomainSnapsho= tPtr snapshot) static int vboxDomainSnapshotDelete(virDomainSnapshotPtr snapshot, unsigned int flags) { - virDomainPtr dom =3D snapshot->domain; + virDomainPtr dom =3D virSnapDom(snapshot); vboxDriverPtr data =3D dom->conn->privateData; vboxIID domiid; IMachine *machine =3D NULL; @@ -7365,7 +7365,7 @@ static int vboxDomainSnapshotDelete(virDomainSnapshot= Ptr snapshot, if (openSessionForMachine(data, dom->uuid, &domiid, &machine) < 0) goto cleanup; - snap =3D vboxDomainSnapshotGet(data, dom, machine, snapshot->name); + snap =3D vboxDomainSnapshotGet(data, dom, machine, virSnapName(snapsho= t)); if (!snap) goto cleanup; diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index 066d617524..1bf6daf9b0 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -2148,7 +2148,7 @@ static virDomainSnapshotObjPtr vzSnapObjFromSnapshot(virDomainSnapshotObjListPtr snapshots, virDomainSnapshotPtr snapshot) { - return vzSnapObjFromName(snapshots, snapshot->name); + return vzSnapObjFromName(snapshots, virSnapName(snapshot)); } static int @@ -2271,14 +2271,14 @@ vzDomainSnapshotGetXMLDesc(virDomainSnapshotPtr sna= pshot, unsigned int flags) virDomainSnapshotObjPtr snap; char uuidstr[VIR_UUID_STRING_BUFLEN]; virDomainSnapshotObjListPtr snapshots =3D NULL; - vzConnPtr privconn =3D snapshot->domain->conn->privateData; + vzConnPtr privconn =3D virSnapDom(snapshot)->conn->privateData; virCheckFlags(VIR_DOMAIN_SNAPSHOT_XML_SECURE, NULL); - if (!(dom =3D vzDomObjFromDomain(snapshot->domain))) + if (!(dom =3D vzDomObjFromDomain(virSnapDom(snapshot)))) return NULL; - if (virDomainSnapshotGetXMLDescEnsureACL(snapshot->domain->conn, dom->= def, flags) < 0) + if (virDomainSnapshotGetXMLDescEnsureACL(virSnapDom(snapshot)->conn, d= om->def, flags) < 0) goto cleanup; if (!(snapshots =3D prlsdkLoadSnapshots(dom))) @@ -2287,7 +2287,7 @@ vzDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snaps= hot, unsigned int flags) if (!(snap =3D vzSnapObjFromSnapshot(snapshots, snapshot))) goto cleanup; - virUUIDFormat(snapshot->domain->uuid, uuidstr); + virUUIDFormat(virSnapDom(snapshot)->uuid, uuidstr); xml =3D virDomainSnapshotDefFormat(uuidstr, snap->def, privconn->drive= r->caps, privconn->driver->xmlopt, @@ -2311,10 +2311,10 @@ vzDomainSnapshotNumChildren(virDomainSnapshotPtr sn= apshot, unsigned int flags) virCheckFlags(VIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS | VIR_DOMAIN_SNAPSHOT_FILTERS_ALL, -1); - if (!(dom =3D vzDomObjFromDomain(snapshot->domain))) + if (!(dom =3D vzDomObjFromDomain(virSnapDom(snapshot)))) return -1; - if (virDomainSnapshotNumChildrenEnsureACL(snapshot->domain->conn, dom-= >def) < 0) + if (virDomainSnapshotNumChildrenEnsureACL(virSnapDom(snapshot)->conn, = dom->def) < 0) goto cleanup; if (!(snapshots =3D prlsdkLoadSnapshots(dom))) @@ -2346,10 +2346,10 @@ vzDomainSnapshotListChildrenNames(virDomainSnapshot= Ptr snapshot, virCheckFlags(VIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS | VIR_DOMAIN_SNAPSHOT_FILTERS_ALL, -1); - if (!(dom =3D vzDomObjFromDomain(snapshot->domain))) + if (!(dom =3D vzDomObjFromDomain(virSnapDom(snapshot)))) return -1; - if (virDomainSnapshotListChildrenNamesEnsureACL(snapshot->domain->conn= , dom->def) < 0) + if (virDomainSnapshotListChildrenNamesEnsureACL(virSnapDom(snapshot)->= conn, dom->def) < 0) goto cleanup; if (!(snapshots =3D prlsdkLoadSnapshots(dom))) @@ -2380,10 +2380,10 @@ vzDomainSnapshotListAllChildren(virDomainSnapshotPt= r snapshot, virCheckFlags(VIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS | VIR_DOMAIN_SNAPSHOT_FILTERS_ALL, -1); - if (!(dom =3D vzDomObjFromDomain(snapshot->domain))) + if (!(dom =3D vzDomObjFromDomain(virSnapDom(snapshot)))) return -1; - if (virDomainSnapshotListAllChildrenEnsureACL(snapshot->domain->conn, = dom->def) < 0) + if (virDomainSnapshotListAllChildrenEnsureACL(virSnapDom(snapshot)->co= nn, dom->def) < 0) goto cleanup; if (!(snapshots =3D prlsdkLoadSnapshots(dom))) @@ -2392,7 +2392,7 @@ vzDomainSnapshotListAllChildren(virDomainSnapshotPtr = snapshot, if (!(snap =3D vzSnapObjFromSnapshot(snapshots, snapshot))) goto cleanup; - n =3D virDomainListSnapshots(snapshots, snap, snapshot->domain, snaps,= flags); + n =3D virDomainListSnapshots(snapshots, snap, virSnapDom(snapshot), sn= aps, flags); cleanup: virDomainSnapshotObjListFree(snapshots); @@ -2471,10 +2471,10 @@ vzDomainSnapshotGetParent(virDomainSnapshotPtr snap= shot, unsigned int flags) virCheckFlags(0, NULL); - if (!(dom =3D vzDomObjFromDomain(snapshot->domain))) + if (!(dom =3D vzDomObjFromDomain(virSnapDom(snapshot)))) return NULL; - if (virDomainSnapshotGetParentEnsureACL(snapshot->domain->conn, dom->d= ef) < 0) + if (virDomainSnapshotGetParentEnsureACL(virSnapDom(snapshot)->conn, do= m->def) < 0) goto cleanup; if (!(snapshots =3D prlsdkLoadSnapshots(dom))) @@ -2490,7 +2490,7 @@ vzDomainSnapshotGetParent(virDomainSnapshotPtr snapsh= ot, unsigned int flags) goto cleanup; } - parent =3D virGetDomainSnapshot(snapshot->domain, snap->def->parent); + parent =3D virGetDomainSnapshot(virSnapDom(snapshot), snap->def->paren= t); cleanup: virDomainSnapshotObjListFree(snapshots); @@ -2543,17 +2543,17 @@ vzDomainSnapshotIsCurrent(virDomainSnapshotPtr snap= shot, unsigned int flags) virCheckFlags(0, -1); - if (!(dom =3D vzDomObjFromDomain(snapshot->domain))) + if (!(dom =3D vzDomObjFromDomain(virSnapDom(snapshot)))) return -1; - if (virDomainSnapshotIsCurrentEnsureACL(snapshot->domain->conn, dom->d= ef) < 0) + if (virDomainSnapshotIsCurrentEnsureACL(virSnapDom(snapshot)->conn, do= m->def) < 0) goto cleanup; if (!(snapshots =3D prlsdkLoadSnapshots(dom))) goto cleanup; current =3D vzFindCurrentSnapshot(snapshots); - ret =3D current && STREQ(snapshot->name, current->def->name); + ret =3D current && STREQ(virSnapName(snapshot), current->def->name); cleanup: virDomainSnapshotObjListFree(snapshots); @@ -2573,10 +2573,10 @@ vzDomainSnapshotHasMetadata(virDomainSnapshotPtr sn= apshot, virCheckFlags(0, -1); - if (!(dom =3D vzDomObjFromDomain(snapshot->domain))) + if (!(dom =3D vzDomObjFromDomain(virSnapDom(snapshot)))) return -1; - if (virDomainSnapshotHasMetadataEnsureACL(snapshot->domain->conn, dom-= >def) < 0) + if (virDomainSnapshotHasMetadataEnsureACL(virSnapDom(snapshot)->conn, = dom->def) < 0) goto cleanup; if (!(snapshots =3D prlsdkLoadSnapshots(dom))) @@ -2674,13 +2674,13 @@ vzDomainSnapshotDelete(virDomainSnapshotPtr snapsho= t, unsigned int flags) virCheckFlags(VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN, -1); - if (!(dom =3D vzDomObjFromDomain(snapshot->domain))) + if (!(dom =3D vzDomObjFromDomain(virSnapDom(snapshot)))) return -1; - if (virDomainSnapshotDeleteEnsureACL(snapshot->domain->conn, dom->def)= < 0) + if (virDomainSnapshotDeleteEnsureACL(virSnapDom(snapshot)->conn, dom->= def) < 0) goto cleanup; - ret =3D prlsdkDeleteSnapshot(dom, snapshot->name, + ret =3D prlsdkDeleteSnapshot(dom, virSnapName(snapshot), flags & VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN= ); cleanup: @@ -2698,10 +2698,10 @@ vzDomainRevertToSnapshot(virDomainSnapshotPtr snaps= hot, unsigned int flags) virCheckFlags(VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED, -1); - if (!(dom =3D vzDomObjFromDomain(snapshot->domain))) + if (!(dom =3D vzDomObjFromDomain(virSnapDom(snapshot)))) return -1; - if (virDomainRevertToSnapshotEnsureACL(snapshot->domain->conn, dom->de= f) < 0) + if (virDomainRevertToSnapshotEnsureACL(virSnapDom(snapshot)->conn, dom= ->def) < 0) goto cleanup; if (vzDomainObjBeginJob(dom) < 0) @@ -2711,7 +2711,7 @@ vzDomainRevertToSnapshot(virDomainSnapshotPtr snapsho= t, unsigned int flags) if (vzEnsureDomainExists(dom) < 0) goto cleanup; - ret =3D prlsdkSwitchToSnapshot(dom, snapshot->name, + ret =3D prlsdkSwitchToSnapshot(dom, virSnapName(snapshot), flags & VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED= ); cleanup: if (job) --=20 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri Apr 19 19:50:23 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1552626177136615.421389215455; Thu, 14 Mar 2019 22:02:57 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5A5843168AD7; Fri, 15 Mar 2019 05:02:55 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 319CE1001DD4; Fri, 15 Mar 2019 05:02:55 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id E963C3FB12; Fri, 15 Mar 2019 05:02:54 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x2F52h35010796 for ; Fri, 15 Mar 2019 01:02:43 -0400 Received: by smtp.corp.redhat.com (Postfix) id 299DF5D73D; Fri, 15 Mar 2019 05:02:43 +0000 (UTC) Received: from blue.redhat.com (ovpn-118-35.phx2.redhat.com [10.3.118.35]) by smtp.corp.redhat.com (Postfix) with ESMTP id 980D65D6A6; Fri, 15 Mar 2019 05:02:42 +0000 (UTC) From: Eric Blake To: libvir-list@redhat.com Date: Fri, 15 Mar 2019 00:02:32 -0500 Message-Id: <20190315050233.10782-8-eblake@redhat.com> In-Reply-To: <20190315050233.10782-1-eblake@redhat.com> References: <20190315050233.10782-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Cc: jtomko@redhat.com, jsnow@redhat.com Subject: [libvirt] [PATCH v6 7/8] snapshot: Create virDomainMoment base class X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.41]); Fri, 15 Mar 2019 05:02:55 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Upcoming patches want to add virDomainCheckpoint that behaves very similarly to virDomainCheckpoint; th eeasiest way to share common code is to give both classes a common base class. Thanks to the accessor functions in the previous patch, we have very few changes required outside of datatypes.[ch]. This also gets rid of the temporary rename hack that the previous patch used for compiler verification. Note that virClassNew() supports a NULL dispose method for a class that has nothing to clean up, but VIR_CLASS_NEW has no easy way to register such a class without a #define hack. I promised my teenage daughter Evelyn that I'd give her credit for her contribution to this commit. I asked her "What would be a good name for a base class for DomainSnapshot and DomainCheckpoint". After explaining what a base class was (using the classic OOB Square and Circle inherit from Shape), she came up with "DomainMoment", which is way better than my initial thought of "DomainPointInTime" or "DomainPIT". Signed-off-by: Eric Blake --- src/datatypes.h | 23 +++++-- src/datatypes.c | 110 ++++++++++++++++++++-------------- src/libvirt-domain-snapshot.c | 2 +- 3 files changed, 85 insertions(+), 50 deletions(-) diff --git a/src/datatypes.h b/src/datatypes.h index dcba279bec..b675251500 100644 --- a/src/datatypes.h +++ b/src/datatypes.h @@ -31,6 +31,7 @@ extern virClassPtr virConnectClass; extern virClassPtr virDomainClass; +extern virClassPtr virDomainMomentClass; extern virClassPtr virDomainSnapshotClass; extern virClassPtr virInterfaceClass; extern virClassPtr virNetworkClass; @@ -668,27 +669,39 @@ struct _virStream { virFreeCallback ff; }; +/** + * _virDomainMoment + * + * Internal abstract structure serving as a base class to a named + * point in time object related to a domain + */ +typedef struct _virDomainMoment virDomainMoment; +typedef virDomainMoment *virDomainMomentPtr; +struct _virDomainMoment { + virObject parent; + char *name; + virDomainPtr domain; +}; + /** * _virDomainSnapshot * * Internal structure associated with a domain snapshot */ struct _virDomainSnapshot { - virObject parent; - char *_name; - virDomainPtr _domain; + virDomainMoment parent; }; static inline char * virSnapName(virDomainSnapshotPtr snapshot) { - return snapshot->_name; + return snapshot->parent.name; } static inline virDomainPtr virSnapDom(virDomainSnapshotPtr snapshot) { - return snapshot->_domain; + return snapshot->parent.domain; } /** diff --git a/src/datatypes.c b/src/datatypes.c index 916c259a6e..f0cfbe11fc 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -1,7 +1,7 @@ /* * datatypes.c: management of structs for public data types * - * Copyright (C) 2006-2015 Red Hat, Inc. + * Copyright (C) 2006-2019 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -36,6 +36,7 @@ VIR_LOG_INIT("datatypes"); virClassPtr virConnectClass; virClassPtr virConnectCloseCallbackDataClass; virClassPtr virDomainClass; +virClassPtr virDomainMomentClass; virClassPtr virDomainSnapshotClass; virClassPtr virInterfaceClass; virClassPtr virNetworkClass; @@ -50,7 +51,8 @@ virClassPtr virStoragePoolClass; static void virConnectDispose(void *obj); static void virConnectCloseCallbackDataDispose(void *obj); static void virDomainDispose(void *obj); -static void virDomainSnapshotDispose(void *obj); +static void virDomainMomentDispose(void *obj); +#define virDomainSnapshotDispose NULL static void virInterfaceDispose(void *obj); static void virNetworkDispose(void *obj); static void virNodeDeviceDispose(void *obj); @@ -86,7 +88,8 @@ virDataTypesOnceInit(void) DECLARE_CLASS_LOCKABLE(virConnect); DECLARE_CLASS_LOCKABLE(virConnectCloseCallbackData); DECLARE_CLASS(virDomain); - DECLARE_CLASS(virDomainSnapshot); + DECLARE_CLASS(virDomainMoment); + DECLARE_CLASS_COMMON(virDomainSnapshot, virDomainMomentClass); DECLARE_CLASS(virInterface); DECLARE_CLASS(virNetwork); DECLARE_CLASS(virNodeDevice); @@ -900,6 +903,64 @@ virNWFilterBindingDispose(void *obj) } +/** + * virGetDomainMoment: + * @domain: the domain involved in a point-in-time moment + * @name: pointer to the domain moment name + * + * Allocates a new concrete subclass of a domain moment object. When + * the object is no longer needed, virObjectUnref() must be called in + * order to not leak data. + * + * Returns a pointer to the domain moment object, or NULL on error. + */ +static virDomainMomentPtr +virGetDomainMoment(virDomainPtr domain, const char *name, virClassPtr subc= lass) +{ + virDomainMomentPtr ret =3D NULL; + + if (virDataTypesInitialize() < 0) + return NULL; + + virCheckDomainGoto(domain, error); + virCheckNonNullArgGoto(name, error); + + if (!(ret =3D virObjectNew(subclass))) + goto error; + if (VIR_STRDUP(ret->name, name) < 0) + goto error; + + ret->domain =3D virObjectRef(domain); + + return ret; + + error: + virObjectUnref(ret); + return NULL; +} + + +/** + * virDomainMomentDispose: + * @obj: the domain moment to release + * + * Unconditionally release all memory associated with a moment. + * The object must not be used once this method returns. + * + * It will also unreference the associated connection object, + * which may also be released if its ref count hits zero. + */ +static void +virDomainMomentDispose(void *obj) +{ + virDomainMomentPtr moment =3D obj; + VIR_DEBUG("release moment %p %s", moment, moment->name); + + VIR_FREE(moment->name); + virObjectUnref(moment->domain); +} + + /** * virGetDomainSnapshot: * @domain: the domain to snapshot @@ -913,47 +974,8 @@ virNWFilterBindingDispose(void *obj) virDomainSnapshotPtr virGetDomainSnapshot(virDomainPtr domain, const char *name) { - virDomainSnapshotPtr ret =3D NULL; - - if (virDataTypesInitialize() < 0) - return NULL; - - virCheckDomainGoto(domain, error); - virCheckNonNullArgGoto(name, error); - - if (!(ret =3D virObjectNew(virDomainSnapshotClass))) - goto error; - if (VIR_STRDUP(ret->_name, name) < 0) - goto error; - - ret->_domain =3D virObjectRef(domain); - - return ret; - - error: - virObjectUnref(ret); - return NULL; -} - - -/** - * virDomainSnapshotDispose: - * @obj: the domain snapshot to release - * - * Unconditionally release all memory associated with a snapshot. - * The snapshot object must not be used once this method returns. - * - * It will also unreference the associated connection object, - * which may also be released if its ref count hits zero. - */ -static void -virDomainSnapshotDispose(void *obj) -{ - virDomainSnapshotPtr snapshot =3D obj; - VIR_DEBUG("release snapshot %p %s", snapshot, snapshot->_name); - - VIR_FREE(snapshot->_name); - virObjectUnref(snapshot->_domain); + return (virDomainSnapshotPtr) virGetDomainMoment(domain, name, + virDomainSnapshotClas= s); } diff --git a/src/libvirt-domain-snapshot.c b/src/libvirt-domain-snapshot.c index e1275c69b0..27fb350cc6 100644 --- a/src/libvirt-domain-snapshot.c +++ b/src/libvirt-domain-snapshot.c @@ -1206,7 +1206,7 @@ int virDomainSnapshotRef(virDomainSnapshotPtr snapshot) { VIR_DEBUG("snapshot=3D%p, refs=3D%d", snapshot, - snapshot ? snapshot->parent.u.s.refs : 0); + snapshot ? snapshot->parent.parent.u.s.refs : 0); virResetLastError(); --=20 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri Apr 19 19:50:23 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 155262618043154.75711869680947; Thu, 14 Mar 2019 22:03:00 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AE6FC7AEB9; Fri, 15 Mar 2019 05:02:58 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 83B021001DE3; Fri, 15 Mar 2019 05:02:58 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 355573FB30; Fri, 15 Mar 2019 05:02:58 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x2F52huj010806 for ; Fri, 15 Mar 2019 01:02:43 -0400 Received: by smtp.corp.redhat.com (Postfix) id D12DF5D75C; Fri, 15 Mar 2019 05:02:43 +0000 (UTC) Received: from blue.redhat.com (ovpn-118-35.phx2.redhat.com [10.3.118.35]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4BA775D6A6; Fri, 15 Mar 2019 05:02:43 +0000 (UTC) From: Eric Blake To: libvir-list@redhat.com Date: Fri, 15 Mar 2019 00:02:33 -0500 Message-Id: <20190315050233.10782-9-eblake@redhat.com> In-Reply-To: <20190315050233.10782-1-eblake@redhat.com> References: <20190315050233.10782-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Cc: jtomko@redhat.com, jsnow@redhat.com Subject: [libvirt] [PATCH v6 8/8] backup: Introduce virDomainCheckpointPtr X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Fri, 15 Mar 2019 05:02:59 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Prepare for introducing a bunch of new public APIs related to backup checkpoints by first introducing a new internal type and errors associated with that type. Checkpoints are modeled heavily after virDomainSnapshotPtr (both represent a point in time of the guest), although a snapshot exists with the intent of rolling back to that state, while a checkpoint exists to make it possible to create an incremental backup at a later time. Thus, it shares the common virDomainMoment base class created in the previous patches. Signed-off-by: Eric Blake --- include/libvirt/virterror.h | 6 +++++- src/util/virerror.c | 12 ++++++++++- include/libvirt/libvirt.h | 6 +++++- src/datatypes.h | 42 ++++++++++++++++++++++++++++++++++++- src/datatypes.c | 22 +++++++++++++++++++ src/libvirt_private.syms | 2 ++ 6 files changed, 86 insertions(+), 4 deletions(-) diff --git a/include/libvirt/virterror.h b/include/libvirt/virterror.h index 3c19ff5e2e..bccf3c731e 100644 --- a/include/libvirt/virterror.h +++ b/include/libvirt/virterror.h @@ -4,7 +4,7 @@ * Description: Provides the interfaces of the libvirt library to handle * errors raised while using the library. * - * Copyright (C) 2006-2016 Red Hat, Inc. + * Copyright (C) 2006-2019 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -132,6 +132,7 @@ typedef enum { VIR_FROM_LIBSSH =3D 66, /* Error from libssh connection transpor= t */ VIR_FROM_RESCTRL =3D 67, /* Error from resource control */ VIR_FROM_FIREWALLD =3D 68, /* Error from firewalld */ + VIR_FROM_DOMAIN_CHECKPOINT =3D 69,/* Error from domain checkpoint */ # ifdef VIR_ENUM_SENTINELS VIR_ERR_DOMAIN_LAST @@ -322,6 +323,9 @@ typedef enum { VIR_ERR_DEVICE_MISSING =3D 99, /* fail to find the desired devi= ce */ VIR_ERR_INVALID_NWFILTER_BINDING =3D 100, /* invalid nwfilter binding= */ VIR_ERR_NO_NWFILTER_BINDING =3D 101, /* no nwfilter binding */ + VIR_ERR_INVALID_DOMAIN_CHECKPOINT =3D 102, /* invalid domain checkpoin= t */ + VIR_ERR_NO_DOMAIN_CHECKPOINT =3D 103, /* domain checkpoint not found */ + VIR_ERR_NO_DOMAIN_BACKUP =3D 104, /* domain backup job id not foun= d */ # ifdef VIR_ENUM_SENTINELS VIR_ERR_NUMBER_LAST diff --git a/src/util/virerror.c b/src/util/virerror.c index 91a513160f..05e535d859 100644 --- a/src/util/virerror.c +++ b/src/util/virerror.c @@ -1,7 +1,7 @@ /* * virerror.c: error handling and reporting code for libvirt * - * Copyright (C) 2006, 2008-2016 Red Hat, Inc. + * Copyright (C) 2006-2019 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -139,6 +139,7 @@ VIR_ENUM_IMPL(virErrorDomain, VIR_ERR_DOMAIN_LAST, "Libssh transport layer", "Resource control", "FirewallD", + "Domain Checkpoint", ); @@ -1214,6 +1215,15 @@ const virErrorMsgTuple virErrorMsgStrings[VIR_ERR_NU= MBER_LAST] =3D { [VIR_ERR_NO_NWFILTER_BINDING] =3D { N_("Network filter binding not found"), N_("Network filter binding not found: %s") }, + [VIR_ERR_INVALID_DOMAIN_CHECKPOINT] =3D { + N_("Invalid domain checkpoint"), + N_("Invalid domain checkpoint: %s") }, + [VIR_ERR_NO_DOMAIN_CHECKPOINT] =3D { + N_("Domain checkpoint not found"), + N_("Domain checkpoint not found: %s") }, + [VIR_ERR_NO_DOMAIN_BACKUP] =3D { + N_("Domain backup job id not found"), + N_("Domain backup job id not found: %s") }, }; diff --git a/include/libvirt/libvirt.h b/include/libvirt/libvirt.h index 20e5d276a7..13de151cb6 100644 --- a/include/libvirt/libvirt.h +++ b/include/libvirt/libvirt.h @@ -4,7 +4,7 @@ * Description: Provides the interfaces of the libvirt library to handle * virtualized domains * - * Copyright (C) 2005-2006, 2010-2014 Red Hat, Inc. + * Copyright (C) 2005-2019 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -34,6 +34,10 @@ extern "C" { # include # include # include +/* FIXME: Temporary hack until later patch creates new + * libvirt-domain-checkpoint.h file */ +typedef struct _virDomainCheckpoint virDomainCheckpoint; +typedef virDomainCheckpoint *virDomainCheckpointPtr; # include # include # include diff --git a/src/datatypes.h b/src/datatypes.h index b675251500..03feb5b18f 100644 --- a/src/datatypes.h +++ b/src/datatypes.h @@ -32,6 +32,7 @@ extern virClassPtr virConnectClass; extern virClassPtr virDomainClass; extern virClassPtr virDomainMomentClass; +extern virClassPtr virDomainCheckpointClass; extern virClassPtr virDomainSnapshotClass; extern virClassPtr virInterfaceClass; extern virClassPtr virNetworkClass; @@ -293,7 +294,23 @@ extern virClassPtr virAdmClientClass; } \ } while (0) -# define virCheckDomainSnapshotReturn(obj, retval) \ + +# define virCheckDomainCheckpointReturn(obj, retval) \ + do { \ + virDomainCheckpointPtr _check =3D (obj); \ + if (!virObjectIsClass(_check, virDomainCheckpointClass) || \ + !virObjectIsClass(virChkDom(_check), virDomainClass) || \ + !virObjectIsClass(virChkDom(_check)->conn, virConnectClass)) {= \ + virReportErrorHelper(VIR_FROM_DOMAIN_CHECKPOINT, \ + VIR_ERR_INVALID_DOMAIN_CHECKPOINT, \ + __FILE__, __FUNCTION__, __LINE__, \ + __FUNCTION__); \ + virDispatchError(NULL); \ + return retval; \ + } \ + } while (0) + +# define virCheckDomainSnapshotReturn(obj, retval) \ do { \ virDomainSnapshotPtr _snap =3D (obj); \ if (!virObjectIsClass(_snap, virDomainSnapshotClass) || \ @@ -683,6 +700,27 @@ struct _virDomainMoment { virDomainPtr domain; }; +/* + * _virDomainCheckpoint + * + * Internal structure associated with a domain checkpoint + */ +struct _virDomainCheckpoint { + virDomainMoment parent; +}; + +static inline char * +virChkName(virDomainCheckpointPtr checkpoint) +{ + return checkpoint->parent.name; +} + +static inline virDomainPtr +virChkDom(virDomainCheckpointPtr checkpoint) +{ + return checkpoint->parent.domain; +} + /** * _virDomainSnapshot * @@ -769,6 +807,8 @@ virNWFilterPtr virGetNWFilter(virConnectPtr conn, virNWFilterBindingPtr virGetNWFilterBinding(virConnectPtr conn, const char *portdev, const char *filtername); +virDomainCheckpointPtr virGetDomainCheckpoint(virDomainPtr domain, + const char *name); virDomainSnapshotPtr virGetDomainSnapshot(virDomainPtr domain, const char *name); diff --git a/src/datatypes.c b/src/datatypes.c index f0cfbe11fc..ec22a7b38a 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -37,6 +37,7 @@ virClassPtr virConnectClass; virClassPtr virConnectCloseCallbackDataClass; virClassPtr virDomainClass; virClassPtr virDomainMomentClass; +virClassPtr virDomainCheckpointClass; virClassPtr virDomainSnapshotClass; virClassPtr virInterfaceClass; virClassPtr virNetworkClass; @@ -52,6 +53,7 @@ static void virConnectDispose(void *obj); static void virConnectCloseCallbackDataDispose(void *obj); static void virDomainDispose(void *obj); static void virDomainMomentDispose(void *obj); +#define virDomainCheckpointDispose NULL #define virDomainSnapshotDispose NULL static void virInterfaceDispose(void *obj); static void virNetworkDispose(void *obj); @@ -89,6 +91,7 @@ virDataTypesOnceInit(void) DECLARE_CLASS_LOCKABLE(virConnectCloseCallbackData); DECLARE_CLASS(virDomain); DECLARE_CLASS(virDomainMoment); + DECLARE_CLASS_COMMON(virDomainCheckpoint, virDomainMomentClass); DECLARE_CLASS_COMMON(virDomainSnapshot, virDomainMomentClass); DECLARE_CLASS(virInterface); DECLARE_CLASS(virNetwork); @@ -961,6 +964,25 @@ virDomainMomentDispose(void *obj) } +/** + * virGetDomainCheckpoint: + * @domain: the domain to checkpoint + * @name: pointer to the domain checkpoint name + * + * Allocates a new domain checkpoint object. When the object is no longer = needed, + * virObjectUnref() must be called in order to not leak data. + * + * Returns a pointer to the domain checkpoint object, or NULL on error. + */ +virDomainCheckpointPtr +virGetDomainCheckpoint(virDomainPtr domain, + const char *name) +{ + return (virDomainCheckpointPtr) virGetDomainMoment(domain, name, + virDomainCheckpoint= Class); +} + + /** * virGetDomainSnapshot: * @domain: the domain to snapshot diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 758ec9f102..96147c093a 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1243,10 +1243,12 @@ virConnectCloseCallbackDataClass; virConnectCloseCallbackDataGetCallback; virConnectCloseCallbackDataRegister; virConnectCloseCallbackDataUnregister; +virDomainCheckpointClass; virDomainClass; virDomainSnapshotClass; virGetConnect; virGetDomain; +virGetDomainCheckpoint; virGetDomainSnapshot; virGetInterface; virGetNetwork; --=20 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri Apr 19 19:50:23 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1552662582916857.8287158389463; Fri, 15 Mar 2019 08:09:42 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 060B81152F; Fri, 15 Mar 2019 15:09:38 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A96A117CC6; Fri, 15 Mar 2019 15:09:37 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 5A9473F5CC; Fri, 15 Mar 2019 15:09:37 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x2FF78bG028743 for ; Fri, 15 Mar 2019 11:07:08 -0400 Received: by smtp.corp.redhat.com (Postfix) id 928A91001DC9; Fri, 15 Mar 2019 15:07:08 +0000 (UTC) Received: from blue.redhat.com (ovpn-118-35.phx2.redhat.com [10.3.118.35]) by smtp.corp.redhat.com (Postfix) with ESMTP id 333851001DC0; Fri, 15 Mar 2019 15:07:03 +0000 (UTC) From: Eric Blake To: libvir-list@redhat.com Date: Fri, 15 Mar 2019 10:06:58 -0500 Message-Id: <20190315150658.27458-1-eblake@redhat.com> In-Reply-To: <20190315050233.10782-1-eblake@redhat.com> References: <20190315050233.10782-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-loop: libvir-list@redhat.com Cc: jsnow@redhat.com, jtomko@redhat.com Subject: [libvirt] [PATCH v6 1.5/8] conf: Split capabilities forward typedefs into virconftypes.h X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Fri, 15 Mar 2019 15:09:38 +0000 (UTC) Content-Type: text/plain; charset="utf-8" As explained in the previous patch, collecting pointer typedefs into a common header makes it easier to avoid circular inclusions. Continue the efforts by pulling the appropriate typedefs from capabilities.h into the new header. This patch is just straight code motion (all typedefs are listed in the same order before and after the patch); a later patch will sort things for legibility. Signed-off-by: Eric Blake Reviewed-by: J=C3=A1n Tomko --- src/conf/capabilities.h | 45 ++--------------------------- src/conf/virconftypes.h | 63 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 43 deletions(-) diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h index cca1a20949..a6331b081c 100644 --- a/src/conf/capabilities.h +++ b/src/conf/capabilities.h @@ -1,7 +1,7 @@ /* * capabilities.h: hypervisor capabilities * - * Copyright (C) 2006-2015 Red Hat, Inc. + * Copyright (C) 2006-2019 Red Hat, Inc. * Copyright (C) 2006-2008 Daniel P. Berrange * * This library is free software; you can redistribute it and/or @@ -23,6 +23,7 @@ # define LIBVIRT_CAPABILITIES_H # include "internal.h" +# include "virconftypes.h" # include "virbuffer.h" # include "cpu_conf.h" # include "virarch.h" @@ -32,24 +33,18 @@ # include -typedef struct _virCapsGuestFeature virCapsGuestFeature; -typedef virCapsGuestFeature *virCapsGuestFeaturePtr; struct _virCapsGuestFeature { char *name; bool defaultOn; bool toggle; }; -typedef struct _virCapsGuestMachine virCapsGuestMachine; -typedef virCapsGuestMachine *virCapsGuestMachinePtr; struct _virCapsGuestMachine { char *name; char *canonical; unsigned int maxCpus; }; -typedef struct _virCapsGuestDomainInfo virCapsGuestDomainInfo; -typedef virCapsGuestDomainInfo *virCapsGuestDomainInfoPtr; struct _virCapsGuestDomainInfo { char *emulator; char *loader; @@ -57,15 +52,11 @@ struct _virCapsGuestDomainInfo { virCapsGuestMachinePtr *machines; }; -typedef struct _virCapsGuestDomain virCapsGuestDomain; -typedef virCapsGuestDomain *virCapsGuestDomainPtr; struct _virCapsGuestDomain { int type; /* virDomainVirtType */ virCapsGuestDomainInfo info; }; -typedef struct _virCapsGuestArch virCapsGuestArch; -typedef virCapsGuestArch *virCapsGuestArchptr; struct _virCapsGuestArch { virArch id; unsigned int wordsize; @@ -75,8 +66,6 @@ struct _virCapsGuestArch { virCapsGuestDomainPtr *domains; }; -typedef struct _virCapsGuest virCapsGuest; -typedef virCapsGuest *virCapsGuestPtr; struct _virCapsGuest { int ostype; virCapsGuestArch arch; @@ -85,8 +74,6 @@ struct _virCapsGuest { virCapsGuestFeaturePtr *features; }; -typedef struct _virCapsHostNUMACellCPU virCapsHostNUMACellCPU; -typedef virCapsHostNUMACellCPU *virCapsHostNUMACellCPUPtr; struct _virCapsHostNUMACellCPU { unsigned int id; unsigned int socket_id; @@ -94,22 +81,16 @@ struct _virCapsHostNUMACellCPU { virBitmapPtr siblings; }; -typedef struct _virCapsHostNUMACellSiblingInfo virCapsHostNUMACellSiblingI= nfo; -typedef virCapsHostNUMACellSiblingInfo *virCapsHostNUMACellSiblingInfoPtr; struct _virCapsHostNUMACellSiblingInfo { int node; /* foreign NUMA node */ unsigned int distance; /* distance to the node */ }; -typedef struct _virCapsHostNUMACellPageInfo virCapsHostNUMACellPageInfo; -typedef virCapsHostNUMACellPageInfo *virCapsHostNUMACellPageInfoPtr; struct _virCapsHostNUMACellPageInfo { unsigned int size; /* page size in kibibytes */ unsigned long long avail; /* the size of pool */ }; -typedef struct _virCapsHostNUMACell virCapsHostNUMACell; -typedef virCapsHostNUMACell *virCapsHostNUMACellPtr; struct _virCapsHostNUMACell { int num; int ncpus; @@ -121,15 +102,11 @@ struct _virCapsHostNUMACell { virCapsHostNUMACellPageInfoPtr pageinfo; }; -typedef struct _virCapsHostSecModelLabel virCapsHostSecModelLabel; -typedef virCapsHostSecModelLabel *virCapsHostSecModelLabelPtr; struct _virCapsHostSecModelLabel { char *type; char *label; }; -typedef struct _virCapsHostSecModel virCapsHostSecModel; -typedef virCapsHostSecModel *virCapsHostSecModelPtr; struct _virCapsHostSecModel { char *model; char *doi; @@ -137,8 +114,6 @@ struct _virCapsHostSecModel { virCapsHostSecModelLabelPtr labels; }; -typedef struct _virCapsHostCacheBank virCapsHostCacheBank; -typedef virCapsHostCacheBank *virCapsHostCacheBankPtr; struct _virCapsHostCacheBank { unsigned int id; unsigned int level; /* 1=3DL1, 2=3DL2, 3=3DL3, etc. */ @@ -149,8 +124,6 @@ struct _virCapsHostCacheBank { virResctrlInfoPerCachePtr *controls; }; -typedef struct _virCapsHostCache virCapsHostCache; -typedef virCapsHostCache *virCapsHostCachePtr; struct _virCapsHostCache { size_t nbanks; virCapsHostCacheBankPtr *banks; @@ -158,16 +131,12 @@ struct _virCapsHostCache { virResctrlInfoMonPtr monitor; }; -typedef struct _virCapsHostMemBWNode virCapsHostMemBWNode; -typedef virCapsHostMemBWNode *virCapsHostMemBWNodePtr; struct _virCapsHostMemBWNode { unsigned int id; virBitmapPtr cpus; /* All CPUs that belong to this node*/ virResctrlInfoMemBWPerNode control; }; -typedef struct _virCapsHostMemBW virCapsHostMemBW; -typedef virCapsHostMemBW *virCapsHostMemBWPtr; struct _virCapsHostMemBW { size_t nnodes; virCapsHostMemBWNodePtr *nodes; @@ -175,8 +144,6 @@ struct _virCapsHostMemBW { virResctrlInfoMonPtr monitor; }; -typedef struct _virCapsHost virCapsHost; -typedef virCapsHost *virCapsHostPtr; struct _virCapsHost { virArch arch; size_t nfeatures; @@ -211,8 +178,6 @@ struct _virCapsHost { bool iommu; }; -typedef struct _virCapsStoragePool virCapsStoragePool; -typedef virCapsStoragePool *virCapsStoragePoolPtr; struct _virCapsStoragePool { int type; }; @@ -224,8 +189,6 @@ typedef void (*virDomainDefNamespaceFree)(void *); typedef int (*virDomainDefNamespaceXMLFormat)(virBufferPtr, void *); typedef const char *(*virDomainDefNamespaceHref)(void); -typedef struct _virDomainXMLNamespace virDomainXMLNamespace; -typedef virDomainXMLNamespace *virDomainXMLNamespacePtr; struct _virDomainXMLNamespace { virDomainDefNamespaceParse parse; virDomainDefNamespaceFree free; @@ -233,8 +196,6 @@ struct _virDomainXMLNamespace { virDomainDefNamespaceHref href; }; -typedef struct _virCaps virCaps; -typedef virCaps *virCapsPtr; struct _virCaps { virObject parent; @@ -248,8 +209,6 @@ struct _virCaps { virCapsStoragePoolPtr *pools; }; -typedef struct _virCapsDomainData virCapsDomainData; -typedef virCapsDomainData *virCapsDomainDataPtr; struct _virCapsDomainData { int ostype; int arch; diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h index 020aa70422..88e7c7083b 100644 --- a/src/conf/virconftypes.h +++ b/src/conf/virconftypes.h @@ -274,4 +274,67 @@ typedef virDomainXMLPrivateDataCallbacks *virDomainXML= PrivateDataCallbacksPtr; typedef struct _virDomainABIStability virDomainABIStability; typedef virDomainABIStability *virDomainABIStabilityPtr; +typedef struct _virCapsGuestFeature virCapsGuestFeature; +typedef virCapsGuestFeature *virCapsGuestFeaturePtr; + +typedef struct _virCapsGuestMachine virCapsGuestMachine; +typedef virCapsGuestMachine *virCapsGuestMachinePtr; + +typedef struct _virCapsGuestDomainInfo virCapsGuestDomainInfo; +typedef virCapsGuestDomainInfo *virCapsGuestDomainInfoPtr; + +typedef struct _virCapsGuestDomain virCapsGuestDomain; +typedef virCapsGuestDomain *virCapsGuestDomainPtr; + +typedef struct _virCapsGuestArch virCapsGuestArch; +typedef virCapsGuestArch *virCapsGuestArchptr; + +typedef struct _virCapsGuest virCapsGuest; +typedef virCapsGuest *virCapsGuestPtr; + +typedef struct _virCapsHostNUMACellCPU virCapsHostNUMACellCPU; +typedef virCapsHostNUMACellCPU *virCapsHostNUMACellCPUPtr; + +typedef struct _virCapsHostNUMACellSiblingInfo virCapsHostNUMACellSiblingI= nfo; +typedef virCapsHostNUMACellSiblingInfo *virCapsHostNUMACellSiblingInfoPtr; + +typedef struct _virCapsHostNUMACellPageInfo virCapsHostNUMACellPageInfo; +typedef virCapsHostNUMACellPageInfo *virCapsHostNUMACellPageInfoPtr; + +typedef struct _virCapsHostNUMACell virCapsHostNUMACell; +typedef virCapsHostNUMACell *virCapsHostNUMACellPtr; + +typedef struct _virCapsHostSecModelLabel virCapsHostSecModelLabel; +typedef virCapsHostSecModelLabel *virCapsHostSecModelLabelPtr; + +typedef struct _virCapsHostSecModel virCapsHostSecModel; +typedef virCapsHostSecModel *virCapsHostSecModelPtr; + +typedef struct _virCapsHostCacheBank virCapsHostCacheBank; +typedef virCapsHostCacheBank *virCapsHostCacheBankPtr; + +typedef struct _virCapsHostCache virCapsHostCache; +typedef virCapsHostCache *virCapsHostCachePtr; + +typedef struct _virCapsHostMemBWNode virCapsHostMemBWNode; +typedef virCapsHostMemBWNode *virCapsHostMemBWNodePtr; + +typedef struct _virCapsHostMemBW virCapsHostMemBW; +typedef virCapsHostMemBW *virCapsHostMemBWPtr; + +typedef struct _virCapsHost virCapsHost; +typedef virCapsHost *virCapsHostPtr; + +typedef struct _virCapsStoragePool virCapsStoragePool; +typedef virCapsStoragePool *virCapsStoragePoolPtr; + +typedef struct _virDomainXMLNamespace virDomainXMLNamespace; +typedef virDomainXMLNamespace *virDomainXMLNamespacePtr; + +typedef struct _virCaps virCaps; +typedef virCaps *virCapsPtr; + +typedef struct _virCapsDomainData virCapsDomainData; +typedef virCapsDomainData *virCapsDomainDataPtr; + #endif /* LIBVIRT_VIRCONFTYPES_H */ --=20 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list