[libvirt] [PATCH 4/5] docs: Fix XML schema handling of LUN address in hostdev tag

Eric Farman farman at linux.vnet.ibm.com
Thu Jun 18 20:05:22 UTC 2015



On 06/18/2015 02:38 PM, John Ferlan wrote:
>
> On 06/16/2015 11:29 PM, Eric Farman wrote:
>> Defining a domain with a SCSI disk attached via a hostdev
>> tag and a source address unit value longer than two digits
>> causes an error when editing the domain with virsh edit,
>> even if no changes are made to the domain definition.
>> The error suggests invalid XML, somewhere:
>>
>>    # virsh edit lmb_guest
>>    error: XML document failed to validate against schema:
>>    Unable to validate doc against /usr/local/share/libvirt/schemas/domain.rng
>>    Extra element devices in interleave
>>    Element domain failed to validate content
>>
>> The virt-xml-validate tool fails with a similar error:
>>
>>    # virt-xml-validate lmb_guest.xml
>>    Relax-NG validity error : Extra element devices in interleave
>>    lmb_guest.xml:17: element devices: Relax-NG validity error :
>>    Element domain failed to validate content
>>    lmb_guest.xml fails to validate
>>
>> The hostdev tag requires a source address to be specified,
>> which includes bus, target, and unit address attributes.
>> According to the SCSI Architecture Model spec (section
>> 4.9 of SAM-2), a LUN address is 64 bits and thus could be
>> up to 20 decimal digits long.  Unfortunately, the XML
>> schema limits this string to just two digits.  Similarly,
>> the target field can be up to 32 bits in length, which
>> would be 10 decimal digits.
>>
>>    # lsscsi -xx
>>    [0:0:19:0x4022401100000000]  disk    IBM      2107900          3.44 /dev/sda
>>    # lsscsi
>>    [0:0:19:1074872354]disk    IBM      2107900          3.44  /dev/sda
>>    # cat lmb_guest.xml
>>    <domain type='kvm'>
>>      <name>lmb_guest</name>
>>      <memory unit='MiB'>1024</memory>
>>    ...trimmed...
>>      <devices>
>>        <controller type='scsi' model='virtio-scsi' index='0'/>
>>        <hostdev mode='subsystem' type='scsi'>
>>          <source>
>>            <adapter name='scsi_host0'/>
>>            <address bus='0' target='19' unit='1074872354'/>
>>          </source>
>>        </hostdev>
>>    ...trimmed...
>>
>> Since the reference unit and target fields are used in
>> several places in the XML schema, create a separate one
>> specific for SCSI Logical Units that will permit the
>> greater length.  This permits both the validation utility
>> and the virsh edit command to succeed when a hostdev
>> tag is included.
>>
>> Signed-off-by: Eric Farman <farman at linux.vnet.ibm.com>
>> Reviewed-by: Matthew Rosato <mjrosato at linux.vnet.ibm.com>
>> Reviewed-by: Stefan Zimmermann <stzi at linux.vnet.ibm.com>
>> Reviewed-by: Boris Fiuczynski <fiuczy at linux.vnet.ibm.com>
>> ---
>>   docs/formatdomain.html.in     |  6 +++++-
>>   docs/schemas/domaincommon.rng | 14 ++++++++++++--
>>   2 files changed, 17 insertions(+), 3 deletions(-)
>>
>
>> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
>> index 4e85b51..c88c4a6 100644
>> --- a/docs/formatdomain.html.in
>> +++ b/docs/formatdomain.html.in
>> @@ -3256,7 +3256,11 @@
>>             </dd>
>>             <dt>scsi</dt>
>>             <dd>SCSI devices are described by both the <code>adapter</code>
>> -            and <code>address</code> elements.
>> +            and <code>address</code> elements. The <code>address</code>
>> +            element includes a <code>bus</code> attribute (a 2-digit bus
>> +            number), a <code>target</code> attribute (a 10-digit target
>> +            number), and a <code>unit</code> attribute (a 20-digit unit
>> +            number on the bus).
> Since we know from the v1 comments that qemu has a max of 16384 units, add:
>
> Not all hypervisors support larger <code>unit</code> values. It is up to
> each hypervisor to determine the maximum value supported for the adapter.
>
> I could add "<code>target</code> and " if you think that would be better..

The text with both target and unit sounds good to me.

>
>
>>               <p>
>>               <span class="since">Since 1.2.8</span>, the <code>source</code>
>>               element of a SCSI device may contain the <code>protocol</code>
>> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
>> index f0f7400..b3c5cb8 100644
>> --- a/docs/schemas/domaincommon.rng
>> +++ b/docs/schemas/domaincommon.rng
>> @@ -3833,10 +3833,10 @@
>>         <ref name="driveBus"/>
>>       </attribute>
>>       <attribute name="target">
>> -      <ref name="driveTarget"/>
>> +      <ref name="driveSCSITarget"/>
>>       </attribute>
>>       <attribute name="unit">
>> -      <ref name="driveUnit"/>
>> +      <ref name="driveSCSIUnit"/>
>>       </attribute>
>>     </define>
>>     <define name="usbportaddress">
>> @@ -5129,11 +5129,21 @@
>>         <param name="pattern">[0-9]{1,2}</param>
>>       </data>
>>     </define>
>> +  <define name="driveSCSITarget">
>> +    <data type="string">
>> +      <param name="pattern">[0-9]{1,10}</param>
>> +    </data>
>> +  </define>
>>     <define name="driveUnit">
>>       <data type="string">
>>         <param name="pattern">[0-9]{1,2}</param>
>>       </data>
>>     </define>
>> +  <define name="driveSCSIUnit">
>> +    <data type="string">
>> +      <param name="pattern">[0-9]{1,20}</param>
>> +    </data>
>> +  </define>
>>     <define name="featureName">
>>       <data type="string">
>>         <param name='pattern'>[a-zA-Z0-9\-_\.]+</param>
>>
> I'm going to add a test as well. It's essentially a copy of
> tests/qemuxml2argvdata/qemuxml2argv-hostdev-scsi-virtio-scsi.xml
> adjusted to have a larger unit value (it'll be attached)
>
Ok.  If you push it as a separate patch, feel free to add:

Reviewed-by: Eric Farman <farman at linux.vnet.ibm.com>

Thanks,
   Eric




More information about the libvir-list mailing list