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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list