diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 1ce894107f..c0ec00b782 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1328,6 +1328,18 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, } } + if (disk->iomode) { + if (qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE_AIO) { + virBufferVSprintf(&opt, ",aio=%s", + virDomainDiskIoTypeToString(disk->iomode)); + } else { + qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("disk aio mode not supported with this " + "QEMU binary")); + goto error; + } + } + if (virBufferError(&opt)) { virReportOOMError(); goto error; @@ -4545,6 +4557,11 @@ qemuParseCommandLineDisk(virCapsPtr caps, } else if (STREQ(keywords[i], "readonly")) { if ((values[i] == NULL) || STREQ(values[i], "on")) def->readonly = 1; + } else if (STREQ(keywords[i], "aio")) { + if ((def->iomode = virDomainDiskIoTypeFromString(values[i])) < 0) { + qemuReportError(VIR_ERR_INTERNAL_ERROR, + _("cannot parse io mode '%s'"), values[i]); + } } } diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-aio.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-aio.args new file mode 100644 index 0000000000..15d2a1b76d --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-aio.args @@ -0,0 +1 @@ +LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -drive file=/dev/HostVG/QEMUGuest1,if=ide,bus=0,unit=0,format=qcow2,cache=none,aio=native -drive file=/dev/HostVG/QEMUGuest2,if=ide,media=cdrom,bus=1,unit=0,format=raw,aio=threads -net none -serial none -parallel none -usb diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-aio.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-aio.xml new file mode 100644 index 0000000000..d8937360ca --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-aio.xml @@ -0,0 +1,33 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219200 + 219200 + 1 + + hvm + + + + destroy + restart + destroy + + /usr/bin/qemu + + + + +
+ + + + + + +
+ + + + + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 0c0693b7be..0a39791d54 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -320,6 +320,8 @@ mymain(int argc, char **argv) QEMUD_CMD_FLAG_DEVICE | QEMUD_CMD_FLAG_NODEFCONFIG, false); DO_TEST("disk-scsi-device-auto", QEMUD_CMD_FLAG_DRIVE | QEMUD_CMD_FLAG_DEVICE | QEMUD_CMD_FLAG_NODEFCONFIG, false); + DO_TEST("disk-aio", QEMUD_CMD_FLAG_DRIVE | QEMUD_CMD_FLAG_DRIVE_AIO | + QEMUD_CMD_FLAG_DRIVE_CACHE_V2 | QEMUD_CMD_FLAG_DRIVE_FORMAT, false); DO_TEST("graphics-vnc", 0, false); DO_TEST("graphics-vnc-socket", 0, false); diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index ab82d36520..dad91d4e77 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -132,6 +132,7 @@ mymain(int argc, char **argv) DO_TEST("clock-utc"); DO_TEST("clock-localtime"); DO_TEST("hugepages"); + DO_TEST("disk-aio"); DO_TEST("disk-cdrom"); DO_TEST("disk-floppy"); DO_TEST("disk-many");