1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2024-12-22 17:34:18 +03:00

schema: Add missing block data for nodedev

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@redhat.com>
ACKed-by Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
John Ferlan 2018-05-19 08:00:58 -04:00
parent c1a0601deb
commit 4804a4db33
5 changed files with 41 additions and 0 deletions

View File

@ -578,6 +578,7 @@
<text/> <text/>
</element> </element>
</optional> </optional>
<ref name='blockData'/>
</element> </element>
</define> </define>
@ -585,6 +586,18 @@
<element name='size'> <element name='size'>
<ref name='unsignedLong'/> <ref name='unsignedLong'/>
</element> </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>
<define name='capdrm'> <define name='capdrm'>

View File

@ -11,6 +11,8 @@
<media_available>1</media_available> <media_available>1</media_available>
<media_size>12345678</media_size> <media_size>12345678</media_size>
<media_label>Windows_XP_Label</media_label> <media_label>Windows_XP_Label</media_label>
<logical_block_size>2048</logical_block_size>
<num_blocks>6028</num_blocks>
</capability> </capability>
</capability> </capability>
</device> </device>

View File

@ -13,5 +13,7 @@
<vendor>HP</vendor> <vendor>HP</vendor>
<serial>3600c0ff000d7a2a5d463ff4902000000</serial> <serial>3600c0ff000d7a2a5d463ff4902000000</serial>
<size>15626928128</size> <size>15626928128</size>
<logical_block_size>512</logical_block_size>
<num_blocks>30521344</num_blocks>
</capability> </capability>
</device> </device>

View File

@ -8,5 +8,7 @@
<model>HTS721010G9SA00</model> <model>HTS721010G9SA00</model>
<vendor>ATA</vendor> <vendor>ATA</vendor>
<size>100030242816</size> <size>100030242816</size>
<logical_block_size>512</logical_block_size>
<num_blocks>195371568</num_blocks>
</capability> </capability>
</device> </device>

View File

@ -23,6 +23,7 @@ testCompareXMLToXMLFiles(const char *xml)
char *actual = NULL; char *actual = NULL;
int ret = -1; int ret = -1;
virNodeDeviceDefPtr dev = NULL; virNodeDeviceDefPtr dev = NULL;
virNodeDevCapsDefPtr caps;
if (virTestLoadFile(xml, &xmlData) < 0) if (virTestLoadFile(xml, &xmlData) < 0)
goto fail; goto fail;
@ -30,6 +31,27 @@ testCompareXMLToXMLFiles(const char *xml)
if (!(dev = virNodeDeviceDefParseString(xmlData, EXISTING_DEVICE, NULL))) if (!(dev = virNodeDeviceDefParseString(xmlData, EXISTING_DEVICE, NULL)))
goto fail; 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))) if (!(actual = virNodeDeviceDefFormat(dev)))
goto fail; goto fail;