[libvirt] [PATCH 12/12] conf: Save disk's original unpriv_sgio state into status XML
Daniel P. Berrange
berrange at redhat.com
Wed Dec 12 17:21:16 UTC 2012
On Tue, Dec 11, 2012 at 09:37:29PM +0800, Osier Yang wrote:
> This allows the disk's original_unpriv value is not lost after
> restarting or reloading libvirtd.
> ---
> src/conf/domain_conf.c | 35 +++++++++++++++++++++++++++++++----
> 1 files changed, 31 insertions(+), 4 deletions(-)
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 1edba69..599d299 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -70,6 +70,7 @@ typedef enum {
> VIR_DOMAIN_XML_INTERNAL_PCI_ORIG_STATES = (1<<18),
> VIR_DOMAIN_XML_INTERNAL_ALLOW_ROM = (1<<19),
> VIR_DOMAIN_XML_INTERNAL_ALLOW_BOOT = (1<<20),
> + VIR_DOMAIN_XML_INTERNAL_OLD_DISK_CDBFILTER = (1<<21),
> } virDomainXMLInternalFlags;
>
> VIR_ENUM_IMPL(virDomainTaint, VIR_DOMAIN_TAINT_LAST,
> @@ -3535,6 +3536,7 @@ virDomainDiskDefParseXML(virCapsPtr caps,
> char *snapshot = NULL;
> char *rawio = NULL;
> char *cdbfilter = NULL;
> + char *orig_cdbfilter = NULL;
> char *driverName = NULL;
> char *driverType = NULL;
> char *source = NULL;
> @@ -3600,6 +3602,8 @@ virDomainDiskDefParseXML(virCapsPtr caps,
>
> rawio = virXMLPropString(node, "rawio");
> cdbfilter = virXMLPropString(node, "cdbfilter");
> + if (flags & VIR_DOMAIN_XML_INTERNAL_OLD_DISK_CDBFILTER)
> + orig_cdbfilter = virXMLPropString(node, "orig_cdbfilter");
>
> cur = node->children;
> while (cur != NULL) {
> @@ -4092,6 +4096,19 @@ virDomainDiskDefParseXML(virCapsPtr caps,
> def->cdbfilter = cdbfilter_val;
> }
>
> + if (orig_cdbfilter) {
> + int orig_cdbfilter_val = 0;
> +
> + if ((orig_cdbfilter_val =
> + virDomainDiskCDBFilterTypeFromString(orig_cdbfilter)) < 0) {
> + virReportError(VIR_ERR_XML_ERROR,
> + _("unknown disk cdbfilter setting '%s'"),
> + orig_cdbfilter);
> + goto error;
> + }
> + def->orig_cdbfilter = orig_cdbfilter_val;
> + }
> +
> if (bus) {
> if ((def->bus = virDomainDiskBusTypeFromString(bus)) < 0) {
> virReportError(VIR_ERR_INTERNAL_ERROR,
> @@ -12014,6 +12031,12 @@ virDomainDiskDefFormat(virBufferPtr buf,
> if (def->cdbfilter)
> virBufferAsprintf(buf, " cdbfilter='%s'",
> virDomainDiskCDBFilterTypeToString(def->cdbfilter));
> +
> + if ((flags & VIR_DOMAIN_XML_INTERNAL_OLD_DISK_CDBFILTER) &&
> + def->orig_cdbfilter)
> + virBufferAsprintf(buf, " orig_cdbfilter='%s'",
> + virDomainDiskCDBFilterTypeToString(def->orig_cdbfilter));
> +
> if (def->snapshot &&
> !(def->snapshot == VIR_DOMAIN_SNAPSHOT_LOCATION_NONE && def->readonly))
> virBufferAsprintf(buf, " snapshot='%s'",
> @@ -13685,7 +13708,8 @@ virDomainIsAllVcpupinInherited(virDomainDefPtr def)
>
> verify(((VIR_DOMAIN_XML_INTERNAL_STATUS |
> VIR_DOMAIN_XML_INTERNAL_ACTUAL_NET |
> - VIR_DOMAIN_XML_INTERNAL_PCI_ORIG_STATES)
> + VIR_DOMAIN_XML_INTERNAL_PCI_ORIG_STATES |
> + VIR_DOMAIN_XML_INTERNAL_OLD_DISK_CDBFILTER)
> & DUMPXML_FLAGS) == 0);
>
> /* This internal version can accept VIR_DOMAIN_XML_INTERNAL_*,
> @@ -13707,7 +13731,8 @@ virDomainDefFormatInternal(virDomainDefPtr def,
> virCheckFlags(DUMPXML_FLAGS |
> VIR_DOMAIN_XML_INTERNAL_STATUS |
> VIR_DOMAIN_XML_INTERNAL_ACTUAL_NET |
> - VIR_DOMAIN_XML_INTERNAL_PCI_ORIG_STATES,
> + VIR_DOMAIN_XML_INTERNAL_PCI_ORIG_STATES |
> + VIR_DOMAIN_XML_INTERNAL_OLD_DISK_CDBFILTER,
> -1);
>
> if (!(type = virDomainVirtTypeToString(def->virtType))) {
> @@ -14465,7 +14490,8 @@ int virDomainSaveStatus(virCapsPtr caps,
> unsigned int flags = (VIR_DOMAIN_XML_SECURE |
> VIR_DOMAIN_XML_INTERNAL_STATUS |
> VIR_DOMAIN_XML_INTERNAL_ACTUAL_NET |
> - VIR_DOMAIN_XML_INTERNAL_PCI_ORIG_STATES);
> + VIR_DOMAIN_XML_INTERNAL_PCI_ORIG_STATES |
> + VIR_DOMAIN_XML_INTERNAL_OLD_DISK_CDBFILTER);
>
> int ret = -1;
> char *xml;
> @@ -14565,7 +14591,8 @@ static virDomainObjPtr virDomainLoadStatus(virCapsPtr caps,
> if (!(obj = virDomainObjParseFile(caps, statusFile, expectedVirtTypes,
> VIR_DOMAIN_XML_INTERNAL_STATUS |
> VIR_DOMAIN_XML_INTERNAL_ACTUAL_NET |
> - VIR_DOMAIN_XML_INTERNAL_PCI_ORIG_STATES)))
> + VIR_DOMAIN_XML_INTERNAL_PCI_ORIG_STATES |
> + VIR_DOMAIN_XML_INTERNAL_OLD_DISK_CDBFILTER)))
> goto error;
>
> virUUIDFormat(obj->def->uuid, uuidstr);
I must say I really don't like using virDomainDefPtr to hold driver
state information like this. The driver specific domain status XML
is really the place for it.
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list