diff options
Diffstat (limited to 'src/qemu/qemu_command.c')
-rw-r--r-- | src/qemu/qemu_command.c | 14 |
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")) |