mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-21 20:15:17 +00:00
qemu: domain: Add helper for translating disk cachemode to qemu flags
Add helper which will map values of disk cache mode to the flags which are accepted by various parts of the qemu block layer. Signed-off-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
parent
976fbb98c8
commit
e2244abc60
@ -11866,6 +11866,81 @@ qemuDomainPrepareDiskSource(virDomainDiskDefPtr disk,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* qemuDomainDiskCachemodeFlags:
|
||||
*
|
||||
* Converts disk cachemode to the cache mode options for qemu. Returns -1 for
|
||||
* invalid @cachemode values and fills the flags and returns 0 on success.
|
||||
* Flags may be NULL.
|
||||
*/
|
||||
int
|
||||
qemuDomainDiskCachemodeFlags(int cachemode,
|
||||
bool *writeback,
|
||||
bool *direct,
|
||||
bool *noflush)
|
||||
{
|
||||
bool dummy;
|
||||
|
||||
if (!writeback)
|
||||
writeback = &dummy;
|
||||
|
||||
if (!direct)
|
||||
direct = &dummy;
|
||||
|
||||
if (!noflush)
|
||||
noflush = &dummy;
|
||||
|
||||
/* Mapping of cache modes to the attributes according to qemu-options.hx
|
||||
* │ cache.writeback cache.direct cache.no-flush
|
||||
* ─────────────┼─────────────────────────────────────────────────
|
||||
* writeback │ true false false
|
||||
* none │ true true false
|
||||
* writethrough │ false false false
|
||||
* directsync │ false true false
|
||||
* unsafe │ true false true
|
||||
*/
|
||||
switch ((virDomainDiskCache) cachemode) {
|
||||
case VIR_DOMAIN_DISK_CACHE_DISABLE: /* 'none' */
|
||||
*writeback = true;
|
||||
*direct = true;
|
||||
*noflush = false;
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_DISK_CACHE_WRITETHRU:
|
||||
*writeback = false;
|
||||
*direct = false;
|
||||
*noflush = false;
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_DISK_CACHE_WRITEBACK:
|
||||
*writeback = true;
|
||||
*direct = false;
|
||||
*noflush = false;
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_DISK_CACHE_DIRECTSYNC:
|
||||
*writeback = false;
|
||||
*direct = true;
|
||||
*noflush = false;
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_DISK_CACHE_UNSAFE:
|
||||
*writeback = true;
|
||||
*direct = false;
|
||||
*noflush = true;
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_DISK_CACHE_DEFAULT:
|
||||
case VIR_DOMAIN_DISK_CACHE_LAST:
|
||||
default:
|
||||
virReportEnumRangeError(virDomainDiskCache, cachemode);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
qemuProcessEventFree(struct qemuProcessEvent *event)
|
||||
{
|
||||
|
@ -994,4 +994,10 @@ qemuDomainPrepareDiskSource(virDomainDiskDefPtr disk,
|
||||
qemuDomainObjPrivatePtr priv,
|
||||
virQEMUDriverConfigPtr cfg);
|
||||
|
||||
int
|
||||
qemuDomainDiskCachemodeFlags(int cachemode,
|
||||
bool *writeback,
|
||||
bool *direct,
|
||||
bool *noflush);
|
||||
|
||||
#endif /* __QEMU_DOMAIN_H__ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user