aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/qemu/qemu_command.c')
-rw-r--r--src/qemu/qemu_command.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 0adc56a5f..9174a5f4e 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -66,14 +66,16 @@ VIR_ENUM_IMPL(qemuDiskCacheV1, VIR_DOMAIN_DISK_CACHE_LAST,
"off",
"off", /* writethrough not supported, so for safety, disable */
"on", /* Old 'on' was equivalent to 'writeback' */
- "off"); /* directsync not supported, for safety, disable */
+ "off", /* directsync not supported, for safety, disable */
+ "off"); /* unsafe not supported, for safety, disable */
VIR_ENUM_IMPL(qemuDiskCacheV2, VIR_DOMAIN_DISK_CACHE_LAST,
"default",
"none",
"writethrough",
"writeback",
- "directsync");
+ "directsync",
+ "unsafe");
VIR_ENUM_DECL(qemuVideo)
@@ -1622,6 +1624,12 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk,
_("disk cache mode 'directsync' is not "
"supported by this QEMU"));
goto error;
+ } else if (disk->cachemode == VIR_DOMAIN_DISK_CACHE_UNSAFE &&
+ !qemuCapsGet(qemuCaps, QEMU_CAPS_DRIVE_CACHE_UNSAFE)) {
+ qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("disk cache mode 'unsafe' is not "
+ "supported by this QEMU"));
+ goto error;
}
} else {
mode = qemuDiskCacheV1TypeToString(disk->cachemode);
@@ -5536,6 +5544,8 @@ qemuParseCommandLineDisk(virCapsPtr caps,
def->cachemode = VIR_DOMAIN_DISK_CACHE_WRITETHRU;
else if (STREQ(values[i], "directsync"))
def->cachemode = VIR_DOMAIN_DISK_CACHE_DIRECTSYNC;
+ else if (STREQ(values[i], "unsafe"))
+ def->cachemode = VIR_DOMAIN_DISK_CACHE_UNSAFE;
} else if (STREQ(keywords[i], "werror") ||
STREQ(keywords[i], "rerror")) {
if (STREQ(values[i], "stop"))