[libvirt] [PATCHv5 06/13] Add compatibility attribute to disks

Ján Tomko jtomko at redhat.com
Tue Aug 23 22:20:48 UTC 2016


A new attribute to alter the virtio revision:
<disk>
   <driver compatibility='transitional'/>
</disk>

https://bugzilla.redhat.com/show_bug.cgi?id=1227354
---
 docs/formatdomain.html.in                                   |  8 +++++++-
 docs/schemas/domaincommon.rng                               |  3 +++
 src/conf/domain_conf.c                                      |  7 +++++++
 src/conf/domain_conf.h                                      |  1 +
 tests/qemuxml2argvdata/qemuxml2argv-virtio-revision.xml     | 12 ++++++++++++
 tests/qemuxml2xmloutdata/qemuxml2xmlout-virtio-revision.xml | 12 ++++++++++++
 6 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 56dddbd..3f06613 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -2084,7 +2084,7 @@
       <target dev='vdc' bus='virtio'/>
     </disk>
     <disk type='file' device='disk'>
-      <driver name='qemu' type='qcow2'/>
+      <driver name='qemu' type='qcow2' compatibility='modern'/>
       <source file='/var/lib/libvirt/images/domain.qcow'/>
       <backingStore type='file'>
         <format type='qcow2'/>
@@ -2667,6 +2667,12 @@
             <code>bus</code> and "pci" or "ccw" <code>address</code> types.
             <span class='since'>Since 1.2.8 (QEMU 2.1)</span>
           </li>
+          <li>
+            The <code>compatibility</code> attribute can be used to specify
+            the compatibility of virtio devices. Allowed values are
+            <code>legacy</code>, <code>transitional</code> and <code>modern</code>.
+            <span class="since">Since 2.2.0</span>.
+          </li>
         </ul>
       </dd>
       <dt><code>backenddomain</code></dt>
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 8ed4b9d..2cf3c1b 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -1641,6 +1641,9 @@
       <optional>
         <ref name="detect_zeroes"/>
       </optional>
+      <optional>
+        <ref name="compatibility"/>
+      </optional>
       <empty/>
     </element>
   </define>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 53c3453..b7a5e26 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -7671,6 +7671,9 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
         }
     }
 
+    if (virDomainDriverCompatibilityParseXML(ctxt, &def->compatibility) < 0)
+        goto error;
+
     /* Disk volume types will have authentication information handled in
      * virStorageTranslateDiskSourcePool
      */
@@ -19921,6 +19924,10 @@ virDomainDiskDefFormat(virBufferPtr buf,
         virBufferAsprintf(&driverBuf, " iothread='%u'", def->iothread);
     if (def->detect_zeroes)
         virBufferAsprintf(&driverBuf, " detect_zeroes='%s'", detect_zeroes);
+    if (def->compatibility) {
+        virBufferAsprintf(&driverBuf, " compatibility='%s'",
+                          virDomainDriverCompatibilityTypeToString(def->compatibility));
+    }
     if (virBufferUse(&driverBuf)) {
         virBufferAddLit(buf, "<driver");
         virBufferAddBuffer(buf, &driverBuf);
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index ac9f552..5ceb22a 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -621,6 +621,7 @@ struct _virDomainDiskDef {
     unsigned int iothread; /* unused = 0, > 0 specific thread # */
     int detect_zeroes; /* enum virDomainDiskDetectZeroes */
     char *domain_name; /* backend domain name */
+    virDomainDriverCompatibility compatibility;
 };
 
 
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-revision.xml b/tests/qemuxml2argvdata/qemuxml2argv-virtio-revision.xml
index 2e71db1..c37a6c8 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-virtio-revision.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-revision.xml
@@ -14,6 +14,18 @@
   <on_crash>destroy</on_crash>
   <devices>
     <emulator>/usr/bin/qemu</emulator>
+    <disk type='file' device='disk'>
+      <driver name='qemu' type='raw' compatibility='legacy'/>
+      <source file='/var/lib/libvirt/images/img1'/>
+      <target dev='vda' bus='virtio'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
+    </disk>
+    <disk type='file' device='disk'>
+      <driver name='qemu' type='raw' compatibility='modern'/>
+      <source file='/var/lib/libvirt/images/img2'/>
+      <target dev='vdb' bus='virtio'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
+    </disk>
     <controller type='usb' index='0'>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
     </controller>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-virtio-revision.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-virtio-revision.xml
index 2e71db1..c37a6c8 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-virtio-revision.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-virtio-revision.xml
@@ -14,6 +14,18 @@
   <on_crash>destroy</on_crash>
   <devices>
     <emulator>/usr/bin/qemu</emulator>
+    <disk type='file' device='disk'>
+      <driver name='qemu' type='raw' compatibility='legacy'/>
+      <source file='/var/lib/libvirt/images/img1'/>
+      <target dev='vda' bus='virtio'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
+    </disk>
+    <disk type='file' device='disk'>
+      <driver name='qemu' type='raw' compatibility='modern'/>
+      <source file='/var/lib/libvirt/images/img2'/>
+      <target dev='vdb' bus='virtio'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
+    </disk>
     <controller type='usb' index='0'>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
     </controller>
-- 
2.7.3




More information about the libvir-list mailing list