Skip to content

Commit

Permalink
qemu: Format 'write-cache' parameter for disk frontends
Browse files Browse the repository at this point in the history
The disk cache mode translates to various frontend and backend
attributes for the qemu block layer. For the frontend device the
'writeback' parameter is used and provided as 'write-cache'. Implement
this so that we can later switch to using -blockdev where we will not
pass the cachemode directly any more.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
  • Loading branch information
pipo committed Apr 19, 2018
1 parent 955df88 commit 327430f
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 8 deletions.
27 changes: 27 additions & 0 deletions src/qemu/qemu_command.c
Expand Up @@ -1824,6 +1824,30 @@ qemuCheckIOThreads(const virDomainDef *def,
}


static int
qemuBuildDriveDevCacheStr(virDomainDiskDefPtr disk,
virBufferPtr buf,
virQEMUCapsPtr qemuCaps)
{
bool wb;

if (disk->cachemode == VIR_DOMAIN_DISK_CACHE_DEFAULT)
return 0;

if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DISK_WRITE_CACHE))
return 0;

if (qemuDomainDiskCachemodeFlags(disk->cachemode, &wb, NULL, NULL) < 0)
return -1;

virBufferStrcat(buf, ",write-cache=",
virTristateSwitchTypeToString(virTristateSwitchFromBool(wb)),
NULL);

return 0;
}


char *
qemuBuildDriveDevStr(const virDomainDef *def,
virDomainDiskDefPtr disk,
Expand Down Expand Up @@ -2140,6 +2164,9 @@ qemuBuildDriveDevStr(const virDomainDef *def,
}
}

if (qemuBuildDriveDevCacheStr(disk, &opt, qemuCaps) < 0)
goto error;

if (virBufferCheckError(&opt) < 0)
goto error;

Expand Down
10 changes: 6 additions & 4 deletions tests/qemuxml2argvdata/disk-drive-write-cache.x86_64-2.7.0.args
Expand Up @@ -28,16 +28,18 @@ server,nowait \
-device lsi,id=scsi0,bus=pci.0,addr=0x2 \
-drive file=/dev/HostVG/QEMUGuest1,format=qcow2,if=none,id=drive-ide0-0-0,\
cache=writeback \
-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1,\
write-cache=on \
-drive file=/dev/HostVG/QEMUGuest1,format=qcow2,if=none,id=drive-scsi0-0-0,\
cache=none \
-device scsi-hd,bus=scsi0.0,scsi-id=0,drive=drive-scsi0-0-0,id=scsi0-0-0 \
-device scsi-hd,bus=scsi0.0,scsi-id=0,drive=drive-scsi0-0-0,id=scsi0-0-0,\
write-cache=on \
-drive file=/dev/HostVG/QEMUGuest1,format=qcow2,if=none,id=drive-virtio-disk0,\
cache=writethrough \
-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x3,drive=drive-virtio-disk0,\
id=virtio-disk0 \
id=virtio-disk0,write-cache=off \
-drive file=/dev/HostVG/QEMUGuest1,format=qcow2,if=none,id=drive-usb-disk1,\
cache=directsync \
-device usb-storage,bus=usb.0,port=1,drive=drive-usb-disk1,id=usb-disk1,\
removable=off \
removable=off,write-cache=off \
-msg timestamp=on
10 changes: 6 additions & 4 deletions tests/qemuxml2argvdata/disk-drive-write-cache.x86_64-latest.args
Expand Up @@ -28,18 +28,20 @@ server,nowait \
-device lsi,id=scsi0,bus=pci.0,addr=0x2 \
-drive file=/dev/HostVG/QEMUGuest1,format=qcow2,if=none,id=drive-ide0-0-0,\
cache=writeback \
-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1,\
write-cache=on \
-drive file=/dev/HostVG/QEMUGuest1,format=qcow2,if=none,id=drive-scsi0-0-0,\
cache=none \
-device scsi-hd,bus=scsi0.0,scsi-id=0,drive=drive-scsi0-0-0,id=scsi0-0-0 \
-device scsi-hd,bus=scsi0.0,scsi-id=0,drive=drive-scsi0-0-0,id=scsi0-0-0,\
write-cache=on \
-drive file=/dev/HostVG/QEMUGuest1,format=qcow2,if=none,id=drive-virtio-disk0,\
cache=writethrough \
-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x3,drive=drive-virtio-disk0,\
id=virtio-disk0 \
id=virtio-disk0,write-cache=off \
-drive file=/dev/HostVG/QEMUGuest1,format=qcow2,if=none,id=drive-usb-disk1,\
cache=directsync \
-device usb-storage,bus=usb.0,port=1,drive=drive-usb-disk1,id=usb-disk1,\
removable=off \
removable=off,write-cache=off \
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
resourcecontrol=deny \
-msg timestamp=on

0 comments on commit 327430f

Please sign in to comment.