From 9b37c98cf768eb02afb384522a72ec36850876bf Mon Sep 17 00:00:00 2001 From: Jim Fehlig Date: Tue, 5 Jul 2022 11:27:47 -0600 Subject: libxl: Allow setting disk cache mode https://bugzilla.novell.com/show_bug.cgi?id=879425 Signed-off-by: Jim Fehlig --- src/libxl/libxl_conf.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) Index: libvirt-9.0.0/src/libxl/libxl_conf.c =================================================================== --- libvirt-9.0.0.orig/src/libxl/libxl_conf.c +++ libvirt-9.0.0/src/libxl/libxl_conf.c @@ -949,6 +949,28 @@ libxlDiskSetDiscard(libxl_device_disk *x } } +static void +libxlDiskSetCacheMode(libxl_device_disk *x_disk, int cachemode) +{ + switch (cachemode) { +#if defined(LIBXL_HAVE_LIBXL_DEVICE_DISK_DISABLE_FLUSH_MAGIC) + case VIR_DOMAIN_DISK_CACHE_UNSAFE: + if (x_disk->readwrite) + x_disk->readwrite = (x_disk->readwrite & LIBXL_HAVE_LIBXL_DEVICE_DISK_DISABLE_FLUSH_MASK) | LIBXL_HAVE_LIBXL_DEVICE_DISK_DISABLE_FLUSH_MAGIC; + break; +#endif + case VIR_DOMAIN_DISK_CACHE_DIRECTSYNC: + x_disk->direct_io_safe = true; + break; + case VIR_DOMAIN_DISK_CACHE_DEFAULT: + case VIR_DOMAIN_DISK_CACHE_DISABLE: + case VIR_DOMAIN_DISK_CACHE_WRITETHRU: + case VIR_DOMAIN_DISK_CACHE_WRITEBACK: + default: + break; + } +} + static char * libxlMakeNetworkDiskSrcStr(virStorageSource *src, const char *username, @@ -1188,6 +1210,7 @@ libxlMakeDisk(virDomainDiskDef *l_disk, x_disk->readwrite = !l_disk->src->readonly; x_disk->is_cdrom = l_disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM ? 1 : 0; libxlDiskSetDiscard(x_disk, l_disk->discard); + libxlDiskSetCacheMode(x_disk, l_disk->cachemode); /* An empty CDROM must have the empty format, otherwise libxl fails. */ if (x_disk->is_cdrom && !x_disk->pdev_path) x_disk->format = LIBXL_DISK_FORMAT_EMPTY;