diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index ab84730b8f..a025a8ef6b 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -1096,8 +1096,11 @@
- also note that device='lun' will only be recognized for
actual raw devices, never for individual partitions or LVM
partitions (in those cases, the kernel will reject the generic
- SCSI commands, making it identical to device='disk'). The
- optional snapshot
attribute indicates the default
+ SCSI commands, making it identical to device='disk').
+ The optional rawio
attribute indicates that the disk
+ is desirous of rawio capability. This attribute is only valid when
+ device is "lun".
+ The optional snapshot
attribute indicates the default
behavior of the disk during disk snapshots: "internal"
requires a file format such as qcow2 that can store both the
snapshot and the data changes since the snapshot;
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index ee4270ab56..66e5491fc8 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -805,6 +805,14 @@
+
+
+
+ yes
+ no
+
+
+
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 4803cdf33f..35cb7a454d 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -2806,6 +2806,7 @@ virDomainDiskDefParseXML(virCapsPtr caps,
char *type = NULL;
char *device = NULL;
char *snapshot = NULL;
+ char *rawio = NULL;
char *driverName = NULL;
char *driverType = NULL;
char *source = NULL;
@@ -2850,6 +2851,8 @@ virDomainDiskDefParseXML(virCapsPtr caps,
snapshot = virXMLPropString(node, "snapshot");
+ rawio = virXMLPropString(node, "rawio");
+
cur = node->children;
while (cur != NULL) {
if (cur->type == XML_ELEMENT_NODE) {
@@ -3156,6 +3159,26 @@ virDomainDiskDefParseXML(virCapsPtr caps,
def->snapshot = VIR_DOMAIN_DISK_SNAPSHOT_NO;
}
+ if (rawio) {
+ def->rawio_specified = true;
+ if (def->device == VIR_DOMAIN_DISK_DEVICE_LUN) {
+ if (STREQ(rawio, "yes")) {
+ def->rawio = 1;
+ } else if (STREQ(rawio, "no")) {
+ def->rawio = 0;
+ } else {
+ virDomainReportError(VIR_ERR_XML_ERROR,
+ _("unknown disk rawio setting '%s'"),
+ rawio);
+ goto error;
+ }
+ } else {
+ virDomainReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("rawio can be used only with device='lun'"));
+ goto error;
+ }
+ }
+
if (bus) {
if ((def->bus = virDomainDiskBusTypeFromString(bus)) < 0) {
virDomainReportError(VIR_ERR_INTERNAL_ERROR,
@@ -9972,6 +9995,13 @@ virDomainDiskDefFormat(virBufferPtr buf,
virBufferAsprintf(buf,
" rawio_specified) {
+ if (def->rawio == 1) {
+ virBufferAddLit(buf, " rawio='yes'");
+ } else if (def->rawio == 0) {
+ virBufferAddLit(buf, " rawio='no'");
+ }
+ }
if (def->snapshot &&
!(def->snapshot == VIR_DOMAIN_DISK_SNAPSHOT_NO && def->readonly))
virBufferAsprintf(buf, " snapshot='%s'",
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 9a036853c9..503684f408 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -413,6 +413,8 @@ struct _virDomainDiskDef {
unsigned int transient : 1;
virDomainDeviceInfo info;
virStorageEncryptionPtr encryption;
+ bool rawio_specified;
+ int rawio; /* no = 0, yes = 1 */
};
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-lun.args b/tests/qemuxml2argvdata/qemuxml2argv-virtio-lun.args
index 5df9182bfb..b229f2a0db 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-virtio-lun.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-lun.args
@@ -4,8 +4,8 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
-boot dc -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 \
-drive file=/dev/sdfake,if=none,id=drive-virtio-disk0 \
-device virtio-blk-pci,scsi=on,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0 \
--drive file=/var/lib/libvirt/Fedora-14-x86_64-Live-KDE.iso,if=none,media=cdrom,id=drive-ide0-1-0 \
--device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 \
+-drive file=/dev/sdfake2,if=none,id=drive-virtio-disk1 \
+-device virtio-blk-pci,scsi=on,bus=pci.0,addr=0x5,drive=drive-virtio-disk1,id=virtio-disk1 \
-device virtio-net-pci,vlan=0,id=net0,mac=52:54:00:e5:48:58,bus=pci.0,addr=0x3 \
-net user,vlan=0,name=hostnet0 -serial pty -usb -vnc 127.0.0.1:-809 -std-vga \
--device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-lun.xml b/tests/qemuxml2argvdata/qemuxml2argv-virtio-lun.xml
index abe1b2f3c3..63107d524a 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-virtio-lun.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-lun.xml
@@ -16,18 +16,17 @@
restart
/usr/bin/qemu
-
+
-
-
-
-
-
-
+
+
+
+
+