提交 58abf1bb 编写于 作者: J John Ferlan

hostdev: Add "rawio" attribute to _virDomainHostdevSubsysSCSI

Add the 'rawio' attribute to match _virDomainDiskDef and process the
hostdev XML similarly to the disk XML for a lun which supports/requires rawio
上级 320825b4
...@@ -1815,7 +1815,7 @@ ...@@ -1815,7 +1815,7 @@
<dt><code>rawio</code> attribute <dt><code>rawio</code> attribute
<span class="since">since 0.9.10</span></dt> <span class="since">since 0.9.10</span></dt>
<dd> <dd>
Indicates whether the disk is needs rawio capability; valid Indicates whether the disk needs rawio capability. Valid
settings are "yes" or "no" (default is "no"). If any one disk settings are "yes" or "no" (default is "no"). If any one disk
in a domain has rawio='yes', rawio capability will be enabled in a domain has rawio='yes', rawio capability will be enabled
for all disks in the domain (because, in the case of QEMU, this for all disks in the domain (because, in the case of QEMU, this
...@@ -2925,7 +2925,7 @@ ...@@ -2925,7 +2925,7 @@
<pre> <pre>
... ...
&lt;devices&gt; &lt;devices&gt;
&lt;hostdev mode='subsystem' type='scsi'&gt; &lt;hostdev mode='subsystem' type='scsi' sgio='filtered' rawio='yes'&gt;
&lt;source&gt; &lt;source&gt;
&lt;adapter name='scsi_host0'/&gt; &lt;adapter name='scsi_host0'/&gt;
&lt;address type='scsi' bus='0' target='0' unit='0'/&gt; &lt;address type='scsi' bus='0' target='0' unit='0'/&gt;
...@@ -2984,7 +2984,13 @@ ...@@ -2984,7 +2984,13 @@
(<span class="since">since 1.0.6</span>) attribute indicates (<span class="since">since 1.0.6</span>) attribute indicates
whether the kernel will filter unprivileged SG_IO commands for whether the kernel will filter unprivileged SG_IO commands for
the disk, valid settings are "filtered" or "unfiltered". the disk, valid settings are "filtered" or "unfiltered".
The default is "filtered". The default is "filtered". The optional <code>rawio</code>
(<span class="since">since 1.2.9</span>) attribute indicates
whether the lun needs the rawio capability. Valid settings are
"yes" or "no". See the rawio description within the
<a href="#elementsDisks">disk</a> section.
If a disk lun in the domain already has the rawio capability,
then this setting not required.
</dd> </dd>
</dl> </dl>
</dd> </dd>
......
...@@ -1252,9 +1252,7 @@ ...@@ -1252,9 +1252,7 @@
</choice> </choice>
</attribute> </attribute>
<optional> <optional>
<attribute name="rawio"> <ref name="rawIO"/>
<ref name="virYesNo"/>
</attribute>
</optional> </optional>
<optional> <optional>
<attribute name="sgio"> <attribute name="sgio">
...@@ -3577,6 +3575,9 @@ ...@@ -3577,6 +3575,9 @@
</choice> </choice>
</attribute> </attribute>
</optional> </optional>
<optional>
<ref name="rawIO"/>
</optional>
<element name="source"> <element name="source">
<choice> <choice>
<group> <!-- scsi_host adapter --> <group> <!-- scsi_host adapter -->
...@@ -4937,4 +4938,9 @@ ...@@ -4937,4 +4938,9 @@
</optional> </optional>
</element> </element>
</define> </define>
<define name="rawIO">
<attribute name="rawio">
<ref name="virYesNo"/>
</attribute>
</define>
</grammar> </grammar>
...@@ -4504,6 +4504,7 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node, ...@@ -4504,6 +4504,7 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
xmlNodePtr sourcenode; xmlNodePtr sourcenode;
char *managed = NULL; char *managed = NULL;
char *sgio = NULL; char *sgio = NULL;
char *rawio = NULL;
char *backendStr = NULL; char *backendStr = NULL;
int backend; int backend;
int ret = -1; int ret = -1;
...@@ -4521,6 +4522,7 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node, ...@@ -4521,6 +4522,7 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
} }
sgio = virXMLPropString(node, "sgio"); sgio = virXMLPropString(node, "sgio");
rawio = virXMLPropString(node, "rawio");
/* @type is passed in from the caller rather than read from the /* @type is passed in from the caller rather than read from the
* xml document, because it is specified in different places for * xml document, because it is specified in different places for
...@@ -4572,6 +4574,21 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node, ...@@ -4572,6 +4574,21 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
} }
} }
if (rawio) {
if (def->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("rawio is only supported for scsi host device"));
goto error;
}
if ((scsisrc->rawio = virTristateBoolTypeFromString(rawio)) <= 0) {
virReportError(VIR_ERR_XML_ERROR,
_("unknown hostdev rawio setting '%s'"),
rawio);
goto error;
}
}
switch (def->source.subsys.type) { switch (def->source.subsys.type) {
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
if (virDomainHostdevSubsysPCIDefParseXML(sourcenode, def, flags) < 0) if (virDomainHostdevSubsysPCIDefParseXML(sourcenode, def, flags) < 0)
...@@ -4611,6 +4628,7 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node, ...@@ -4611,6 +4628,7 @@ virDomainHostdevDefParseXMLSubsys(xmlNodePtr node,
error: error:
VIR_FREE(managed); VIR_FREE(managed);
VIR_FREE(sgio); VIR_FREE(sgio);
VIR_FREE(rawio);
VIR_FREE(backendStr); VIR_FREE(backendStr);
return ret; return ret;
} }
...@@ -17804,6 +17822,12 @@ virDomainHostdevDefFormat(virBufferPtr buf, ...@@ -17804,6 +17822,12 @@ virDomainHostdevDefFormat(virBufferPtr buf,
scsisrc->sgio) scsisrc->sgio)
virBufferAsprintf(buf, " sgio='%s'", virBufferAsprintf(buf, " sgio='%s'",
virDomainDeviceSGIOTypeToString(scsisrc->sgio)); virDomainDeviceSGIOTypeToString(scsisrc->sgio));
if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI &&
scsisrc->rawio) {
virBufferAsprintf(buf, " rawio='%s'",
virTristateBoolTypeToString(scsisrc->rawio));
}
} }
virBufferAddLit(buf, ">\n"); virBufferAddLit(buf, ">\n");
virBufferAdjustIndent(buf, 2); virBufferAdjustIndent(buf, 2);
......
...@@ -439,6 +439,7 @@ typedef virDomainHostdevSubsysSCSI *virDomainHostdevSubsysSCSIPtr; ...@@ -439,6 +439,7 @@ typedef virDomainHostdevSubsysSCSI *virDomainHostdevSubsysSCSIPtr;
struct _virDomainHostdevSubsysSCSI { struct _virDomainHostdevSubsysSCSI {
int protocol; /* enum virDomainHostdevSCSIProtocolType */ int protocol; /* enum virDomainHostdevSCSIProtocolType */
int sgio; /* enum virDomainDeviceSGIO */ int sgio; /* enum virDomainDeviceSGIO */
int rawio; /* enum virTristateBool */
union { union {
virDomainHostdevSubsysSCSIHost host; virDomainHostdevSubsysSCSIHost host;
virDomainHostdevSubsysSCSIiSCSI iscsi; virDomainHostdevSubsysSCSIiSCSI iscsi;
......
<domain type='qemu'>
<name>QEMUGuest2</name>
<uuid>c7a5fdbd-edaf-9466-926a-d65c16db1809</uuid>
<memory unit='KiB'>219100</memory>
<currentMemory unit='KiB'>219100</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='i686' machine='pc'>hvm</type>
<boot dev='hd'/>
</os>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu</emulator>
<disk type='block' device='disk'>
<source dev='/dev/HostVG/QEMUGuest2'/>
<target dev='hda' bus='ide'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<controller type='scsi' index='0' model='virtio-scsi'/>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
<controller type='pci' index='0' model='pci-root'/>
<hostdev mode='subsystem' type='scsi' managed='yes' sgio='unfiltered' rawio='yes'>
<source>
<adapter name='scsi_host0'/>
<address bus='0' target='0' unit='0'/>
</source>
<address type='drive' controller='0' bus='0' target='4' unit='8'/>
</hostdev>
<memballoon model='virtio'/>
</devices>
</domain>
...@@ -369,6 +369,7 @@ mymain(void) ...@@ -369,6 +369,7 @@ mymain(void)
DO_TEST("disk-copy_on_read"); DO_TEST("disk-copy_on_read");
DO_TEST("hostdev-scsi-shareable"); DO_TEST("hostdev-scsi-shareable");
DO_TEST("hostdev-scsi-sgio"); DO_TEST("hostdev-scsi-sgio");
DO_TEST("hostdev-scsi-rawio");
DO_TEST_DIFFERENT("hostdev-scsi-autogen-address"); DO_TEST_DIFFERENT("hostdev-scsi-autogen-address");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册