[libvirt] [PATCH v2 8/8] schema: Add missing block data for nodedev

John Ferlan jferlan at redhat.com
Mon May 21 12:40:45 UTC 2018


https://bugzilla.redhat.com/show_bug.cgi?id=1566416

Commit id 'fe2af45b' added output for logical_block_size and
num_blocks for both removeable and fixed storage, but did not
update the nodedev capability causing virt-xml-validate to fail.
It's listed as optional only because it only prints if the
sizes are > 0. For a CDROM drive the values won't be formatted.

Update the nodedevxml2xmltest in order to output the values
for storage based on the logic from udevProcessRemoveableMedia
and udevProcessSD with respect to the logical_blocksize and
num_blocks calculations.

Signed-off-by: John Ferlan <jferlan at redhat.com>
---
 docs/schemas/nodedev.rng                           | 13 +++++++++++++
 tests/nodedevschemadata/DVD_with_media.xml         |  2 ++
 ...ge_serial_3600c0ff000d7a2a5d463ff4902000000.xml |  2 ++
 ..._serial_SATA_HTS721010G9SA00_MPCZ12Y0GNGWSE.xml |  2 ++
 tests/nodedevxml2xmltest.c                         | 22 ++++++++++++++++++++++
 5 files changed, 41 insertions(+)

diff --git a/docs/schemas/nodedev.rng b/docs/schemas/nodedev.rng
index 6b063cc225..0498489cfd 100644
--- a/docs/schemas/nodedev.rng
+++ b/docs/schemas/nodedev.rng
@@ -578,6 +578,7 @@
           <text/>
         </element>
       </optional>
+      <ref name='blockData'/>
     </element>
   </define>
 
@@ -585,6 +586,18 @@
     <element name='size'>
       <ref name='unsignedLong'/>
     </element>
+    <ref name='blockData'/>
+  </define>
+
+  <define name='blockData'>
+    <optional>
+      <element name='logical_block_size'>
+        <ref name='unsignedLong'/>
+      </element>
+      <element name='num_blocks'>
+        <ref name='unsignedLong'/>
+      </element>
+    </optional>
   </define>
 
   <define name='capdrm'>
diff --git a/tests/nodedevschemadata/DVD_with_media.xml b/tests/nodedevschemadata/DVD_with_media.xml
index 673e88fd0a..f169885eb1 100644
--- a/tests/nodedevschemadata/DVD_with_media.xml
+++ b/tests/nodedevschemadata/DVD_with_media.xml
@@ -11,6 +11,8 @@
       <media_available>1</media_available>
       <media_size>12345678</media_size>
       <media_label>Windows_XP_Label</media_label>
+      <logical_block_size>2048</logical_block_size>
+      <num_blocks>6028</num_blocks>
     </capability>
   </capability>
 </device>
diff --git a/tests/nodedevschemadata/storage_serial_3600c0ff000d7a2a5d463ff4902000000.xml b/tests/nodedevschemadata/storage_serial_3600c0ff000d7a2a5d463ff4902000000.xml
index d225dca8fa..5bdbb8ac95 100644
--- a/tests/nodedevschemadata/storage_serial_3600c0ff000d7a2a5d463ff4902000000.xml
+++ b/tests/nodedevschemadata/storage_serial_3600c0ff000d7a2a5d463ff4902000000.xml
@@ -13,5 +13,7 @@
     <vendor>HP</vendor>
     <serial>3600c0ff000d7a2a5d463ff4902000000</serial>
     <size>15626928128</size>
+    <logical_block_size>512</logical_block_size>
+    <num_blocks>30521344</num_blocks>
   </capability>
 </device>
diff --git a/tests/nodedevschemadata/storage_serial_SATA_HTS721010G9SA00_MPCZ12Y0GNGWSE.xml b/tests/nodedevschemadata/storage_serial_SATA_HTS721010G9SA00_MPCZ12Y0GNGWSE.xml
index 3595a0baaa..68dbf0be96 100644
--- a/tests/nodedevschemadata/storage_serial_SATA_HTS721010G9SA00_MPCZ12Y0GNGWSE.xml
+++ b/tests/nodedevschemadata/storage_serial_SATA_HTS721010G9SA00_MPCZ12Y0GNGWSE.xml
@@ -8,5 +8,7 @@
     <model>HTS721010G9SA00</model>
     <vendor>ATA</vendor>
     <size>100030242816</size>
+    <logical_block_size>512</logical_block_size>
+    <num_blocks>195371568</num_blocks>
   </capability>
 </device>
diff --git a/tests/nodedevxml2xmltest.c b/tests/nodedevxml2xmltest.c
index 41ed5c01c2..207d97483e 100644
--- a/tests/nodedevxml2xmltest.c
+++ b/tests/nodedevxml2xmltest.c
@@ -23,6 +23,7 @@ testCompareXMLToXMLFiles(const char *xml)
     char *actual = NULL;
     int ret = -1;
     virNodeDeviceDefPtr dev = NULL;
+    virNodeDevCapsDefPtr caps;
 
     if (virTestLoadFile(xml, &xmlData) < 0)
         goto fail;
@@ -30,6 +31,27 @@ testCompareXMLToXMLFiles(const char *xml)
     if (!(dev = virNodeDeviceDefParseString(xmlData, EXISTING_DEVICE, NULL)))
         goto fail;
 
+    /* Calculate some things that are not read in */
+    for (caps = dev->caps; caps; caps = caps->next) {
+        virNodeDevCapDataPtr data = &caps->data;
+
+        if (caps->data.type == VIR_NODE_DEV_CAP_STORAGE) {
+            if (data->storage.flags & VIR_NODE_DEV_CAP_STORAGE_REMOVABLE) {
+                if (data->storage.flags &
+                    VIR_NODE_DEV_CAP_STORAGE_REMOVABLE_MEDIA_AVAILABLE) {
+                    data->storage.logical_block_size = 2048;
+                    data->storage.num_blocks =
+                        data->storage.removable_media_size /
+                        data->storage.logical_block_size;
+                }
+            } else {
+                data->storage.logical_block_size = 512;
+                data->storage.num_blocks = data->storage.size /
+                                           data->storage.logical_block_size;
+            }
+        }
+    }
+
     if (!(actual = virNodeDeviceDefFormat(dev)))
         goto fail;
 
-- 
2.14.3




More information about the libvir-list mailing list