[libvirt] [PATCH 0/9] qemu: refactor fsdev formatting (virtio-fs epopee)

Ján Tomko (9): tests: qemu: minimize fs9p.xml qemu: add CAPS_LATEST tests for 9pfs qemu: address: remove useless comment qemu: command: rename qemuBuildFSDevCommandLine qemu: command: re-introduce qemuBuildFSDevCommandLine qemu: command: use VIR_AUTOFREE in qemuBuildFSDevCommandLine qemu: introduce qemuDomainDeviceDefValidateFS qemu: command: use VIR_AUTOCLEAN in qemuBuildFS* qemu: command: remove qemuDomainFSDriver src/qemu/qemu_command.c | 111 ++++++------------ src/qemu/qemu_domain.c | 46 +++++++- src/qemu/qemu_domain_address.c | 3 +- .../fs9p-ccw.s390x-latest.args | 44 +++++++ tests/qemuxml2argvdata/fs9p.args | 6 +- .../qemuxml2argvdata/fs9p.x86_64-latest.args | 41 +++++++ tests/qemuxml2argvdata/fs9p.xml | 9 +- tests/qemuxml2argvtest.c | 2 + 8 files changed, 175 insertions(+), 87 deletions(-) create mode 100644 tests/qemuxml2argvdata/fs9p-ccw.s390x-latest.args create mode 100644 tests/qemuxml2argvdata/fs9p.x86_64-latest.args -- 2.19.2

Remove the hard drive, USB controller and memballoon. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- tests/qemuxml2argvdata/fs9p.args | 6 +----- tests/qemuxml2argvdata/fs9p.xml | 9 ++------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/tests/qemuxml2argvdata/fs9p.args b/tests/qemuxml2argvdata/fs9p.args index caeb672760..5b028c7a80 100644 --- a/tests/qemuxml2argvdata/fs9p.args +++ b/tests/qemuxml2argvdata/fs9p.args @@ -24,9 +24,6 @@ server,nowait \ -rtc base=utc \ -no-shutdown \ -no-acpi \ --usb \ --drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ --device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \ -fsdev local,security_model=passthrough,id=fsdev-fs0,path=/export/to/guest \ -device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=/import/from/host,\ bus=pci.0,addr=0x3 \ @@ -36,5 +33,4 @@ path=/export/to/guest2 \ bus=pci.0,addr=0x4 \ -fsdev handle,writeout=immediate,id=fsdev-fs2,path=/export/to/guest3 \ -device virtio-9p-pci,id=fs2,fsdev=fsdev-fs2,mount_tag=/import/from/host3,\ -bus=pci.0,addr=0x5 \ --device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6 +bus=pci.0,addr=0x5 diff --git a/tests/qemuxml2argvdata/fs9p.xml b/tests/qemuxml2argvdata/fs9p.xml index 9216ea97ae..aaa7c466b4 100644 --- a/tests/qemuxml2argvdata/fs9p.xml +++ b/tests/qemuxml2argvdata/fs9p.xml @@ -14,13 +14,7 @@ <on_crash>destroy</on_crash> <devices> <emulator>/usr/bin/qemu-system-i686</emulator> - <disk type='block' device='disk'> - <source dev='/dev/HostVG/QEMUGuest1'/> - <target dev='hda' bus='ide'/> - <address type='drive' controller='0' bus='0' target='0' unit='0'/> - </disk> - <controller type='usb' index='0'/> - <controller type='ide' index='0'/> + <controller type='usb' index='0' model='none'/> <filesystem type='mount'> <source dir='/export/to/guest'/> <target dir='/import/from/host'/> @@ -35,5 +29,6 @@ <source dir='/export/to/guest3'/> <target dir='/import/from/host3'/> </filesystem> + <memballoon model='none'/> </devices> </domain> -- 2.19.2

Use the existing fs9p.xml and fs9p-ccw.xml to run the tests with latest caps on x86_64 and s390x. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- .../fs9p-ccw.s390x-latest.args | 44 +++++++++++++++++++ .../qemuxml2argvdata/fs9p.x86_64-latest.args | 41 +++++++++++++++++ tests/qemuxml2argvtest.c | 2 + 3 files changed, 87 insertions(+) create mode 100644 tests/qemuxml2argvdata/fs9p-ccw.s390x-latest.args create mode 100644 tests/qemuxml2argvdata/fs9p.x86_64-latest.args diff --git a/tests/qemuxml2argvdata/fs9p-ccw.s390x-latest.args b/tests/qemuxml2argvdata/fs9p-ccw.s390x-latest.args new file mode 100644 index 0000000000..efd29c10ea --- /dev/null +++ b/tests/qemuxml2argvdata/fs9p-ccw.s390x-latest.args @@ -0,0 +1,44 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-s390x \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ +-machine s390-ccw-virtio,accel=tcg,usb=off,dump-guest-core=off \ +-m 214 \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-virtio-disk0 \ +-device virtio-blk-ccw,scsi=off,devno=fe.0.0000,drive=drive-virtio-disk0,\ +id=virtio-disk0,bootindex=1 \ +-fsdev local,security_model=passthrough,id=fsdev-fs0,path=/export/to/guest \ +-device virtio-9p-ccw,id=fs0,fsdev=fsdev-fs0,mount_tag=/import/from/host,\ +devno=fe.0.0001 \ +-fsdev local,security_model=mapped,writeout=immediate,id=fsdev-fs1,\ +path=/export/to/guest2 \ +-device virtio-9p-ccw,id=fs1,fsdev=fsdev-fs1,mount_tag=/import/from/host2,\ +devno=fe.0.0002 \ +-fsdev handle,writeout=immediate,id=fsdev-fs2,path=/export/to/guest3 \ +-device virtio-9p-ccw,id=fs2,fsdev=fsdev-fs2,mount_tag=/import/from/host3,\ +devno=fe.0.0003 \ +-device virtio-balloon-ccw,id=balloon0,devno=fe.0.0004 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/fs9p.x86_64-latest.args b/tests/qemuxml2argvdata/fs9p.x86_64-latest.args new file mode 100644 index 0000000000..47b7580817 --- /dev/null +++ b/tests/qemuxml2argvdata/fs9p.x86_64-latest.args @@ -0,0 +1,41 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-i686 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off \ +-m 214 \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-boot strict=on \ +-fsdev local,security_model=passthrough,id=fsdev-fs0,path=/export/to/guest \ +-device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=/import/from/host,\ +bus=pci.0,addr=0x2 \ +-fsdev local,security_model=mapped,writeout=immediate,id=fsdev-fs1,\ +path=/export/to/guest2 \ +-device virtio-9p-pci,id=fs1,fsdev=fsdev-fs1,mount_tag=/import/from/host2,\ +bus=pci.0,addr=0x3 \ +-fsdev handle,writeout=immediate,id=fsdev-fs2,path=/export/to/guest3 \ +-device virtio-9p-pci,id=fs2,fsdev=fsdev-fs2,mount_tag=/import/from/host3,\ +bus=pci.0,addr=0x4 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index ca22d6b6d5..d6e6272518 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1568,8 +1568,10 @@ mymain(void) QEMU_CAPS_DEVICE_ICH9_INTEL_HDA, QEMU_CAPS_OBJECT_USB_AUDIO); DO_TEST("fs9p", NONE); + DO_TEST_CAPS_LATEST("fs9p"); DO_TEST("fs9p-ccw", QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390); + DO_TEST_CAPS_ARCH_LATEST("fs9p-ccw", "s390x"); DO_TEST("hostdev-usb-address", NONE); DO_TEST("hostdev-usb-address-device", NONE); -- 2.19.2

Commit b27375a9b86f010a9a9fc0323be3f204b62195f4 omitted one zero. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_domain_address.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index 972b810211..216ba6235e 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -670,8 +670,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDefPtr dev, case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: - /* should be 0 */ - return pciFlags; + return 0; } } break; -- 2.19.2

This function iterates over all filesystems, not just -fsdevs. Rename it to free the name for a function that actually builds fsdevs. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 6b0cd7f36d..9d5d54fd6e 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2802,9 +2802,9 @@ qemuBuildFSDevStr(const virDomainDef *def, static int -qemuBuildFSDevCommandLine(virCommandPtr cmd, - const virDomainDef *def, - virQEMUCapsPtr qemuCaps) +qemuBuildFilesystemCommandLine(virCommandPtr cmd, + const virDomainDef *def, + virQEMUCapsPtr qemuCaps) { size_t i; @@ -10754,7 +10754,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, if (qemuBuildDisksCommandLine(cmd, def, qemuCaps) < 0) goto error; - if (qemuBuildFSDevCommandLine(cmd, def, qemuCaps) < 0) + if (qemuBuildFilesystemCommandLine(cmd, def, qemuCaps) < 0) goto error; if (qemuBuildNetCommandLine(driver, logManager, secManager, cmd, def, -- 2.19.2

This time it only builds one device. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 44 ++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 9d5d54fd6e..02a6642207 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2801,6 +2801,33 @@ qemuBuildFSDevStr(const virDomainDef *def, } +static int +qemuBuildFSDevCommandLine(virCommandPtr cmd, + virDomainFSDefPtr fs, + const virDomainDef *def, + virQEMUCapsPtr qemuCaps) +{ + char *optstr; + + virCommandAddArg(cmd, "-fsdev"); + if (!(optstr = qemuBuildFSStr(fs))) + return -1; + virCommandAddArg(cmd, optstr); + VIR_FREE(optstr); + + if (qemuCommandAddExtDevice(cmd, &fs->info) < 0) + return -1; + + virCommandAddArg(cmd, "-device"); + if (!(optstr = qemuBuildFSDevStr(def, fs, qemuCaps))) + return -1; + virCommandAddArg(cmd, optstr); + VIR_FREE(optstr); + + return 0; +} + + static int qemuBuildFilesystemCommandLine(virCommandPtr cmd, const virDomainDef *def, @@ -2809,23 +2836,8 @@ qemuBuildFilesystemCommandLine(virCommandPtr cmd, size_t i; for (i = 0; i < def->nfss; i++) { - char *optstr; - virDomainFSDefPtr fs = def->fss[i]; - - virCommandAddArg(cmd, "-fsdev"); - if (!(optstr = qemuBuildFSStr(fs))) - return -1; - virCommandAddArg(cmd, optstr); - VIR_FREE(optstr); - - if (qemuCommandAddExtDevice(cmd, &fs->info) < 0) - return -1; - - virCommandAddArg(cmd, "-device"); - if (!(optstr = qemuBuildFSDevStr(def, fs, qemuCaps))) + if (qemuBuildFSDevCommandLine(cmd, def->fss[i], def, qemuCaps) < 0) return -1; - virCommandAddArg(cmd, optstr); - VIR_FREE(optstr); } return 0; -- 2.19.2

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 02a6642207..8617b010dc 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2807,7 +2807,7 @@ qemuBuildFSDevCommandLine(virCommandPtr cmd, const virDomainDef *def, virQEMUCapsPtr qemuCaps) { - char *optstr; + VIR_AUTOFREE(char *) optstr = NULL; virCommandAddArg(cmd, "-fsdev"); if (!(optstr = qemuBuildFSStr(fs))) @@ -2822,7 +2822,6 @@ qemuBuildFSDevCommandLine(virCommandPtr cmd, if (!(optstr = qemuBuildFSDevStr(def, fs, qemuCaps))) return -1; virCommandAddArg(cmd, optstr); - VIR_FREE(optstr); return 0; } -- 2.19.2

On Tue, Jul 16, 2019 at 13:06:54 +0200, Ján Tomko wrote:
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 02a6642207..8617b010dc 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2807,7 +2807,7 @@ qemuBuildFSDevCommandLine(virCommandPtr cmd, const virDomainDef *def, virQEMUCapsPtr qemuCaps) { - char *optstr; + VIR_AUTOFREE(char *) optstr = NULL;
'optstr' is used twice in this function. If you want to convert to VIR_AUTOFREE, introduce two variables for the two distinct uses.

Move validation of the filesystem device out of qemu_command. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 25 ---------------------- src/qemu/qemu_domain.c | 46 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 26 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 8617b010dc..f938ec22d3 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2707,17 +2707,6 @@ qemuBuildFSStr(virDomainFSDefPtr fs) const char *driver = qemuDomainFSDriverTypeToString(fs->fsdriver); const char *wrpolicy = virDomainFSWrpolicyTypeToString(fs->wrpolicy); - if (fs->type != VIR_DOMAIN_FS_TYPE_MOUNT) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("only supports mount filesystem type")); - goto error; - } - - if (!driver) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("Filesystem driver type not supported")); - goto error; - } virBufferAdd(&opt, driver, -1); if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_PATH || @@ -2729,14 +2718,6 @@ qemuBuildFSStr(virDomainFSDefPtr fs) } else if (fs->accessmode == VIR_DOMAIN_FS_ACCESSMODE_SQUASH) { virBufferAddLit(&opt, ",security_model=none"); } - } else { - /* For other fs drivers, default(passthru) should always - * be supported */ - if (fs->accessmode != VIR_DOMAIN_FS_ACCESSMODE_PASSTHROUGH) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("only supports passthrough accessmode")); - goto error; - } } if (fs->wrpolicy) @@ -2767,12 +2748,6 @@ qemuBuildFSDevStr(const virDomainDef *def, { virBuffer opt = VIR_BUFFER_INITIALIZER; - if (fs->type != VIR_DOMAIN_FS_TYPE_MOUNT) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("can only passthrough directories")); - goto error; - } - if (qemuBuildVirtioDevStr(&opt, "virtio-9p", qemuCaps, VIR_DOMAIN_DEVICE_FS, fs) < 0) { goto error; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 670b928c4c..bd7e8c2648 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -6274,6 +6274,47 @@ qemuDomainDeviceDefValidateIOMMU(const virDomainIOMMUDef *iommu, } +static int +qemuDomainDeviceDefValidateFS(virDomainFSDefPtr fs, + const virDomainDef *def ATTRIBUTE_UNUSED, + virQEMUCapsPtr qemuCaps ATTRIBUTE_UNUSED) +{ + if (fs->type != VIR_DOMAIN_FS_TYPE_MOUNT) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("only supports mount filesystem type")); + return -1; + } + + switch ((virDomainFSDriverType) fs->fsdriver) { + case VIR_DOMAIN_FS_DRIVER_TYPE_DEFAULT: + case VIR_DOMAIN_FS_DRIVER_TYPE_PATH: + break; + + case VIR_DOMAIN_FS_DRIVER_TYPE_HANDLE: + if (fs->accessmode != VIR_DOMAIN_FS_ACCESSMODE_PASSTHROUGH) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("only supports passthrough accessmode")); + return -1; + } + break; + + case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP: + case VIR_DOMAIN_FS_DRIVER_TYPE_NBD: + case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP: + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Filesystem driver type not supported")); + return -1; + + case VIR_DOMAIN_FS_DRIVER_TYPE_LAST: + default: + virReportEnumRangeError(virDomainFSDriverType, fs->fsdriver); + return -1; + } + + return 0; +} + + static int qemuDomainDeviceDefValidateZPCIAddress(virDomainDeviceInfoPtr info, virQEMUCapsPtr qemuCaps) @@ -6429,8 +6470,11 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev, ret = qemuDomainDeviceDefValidateIOMMU(dev->data.iommu, def, qemuCaps); break; - case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_FS: + ret = qemuDomainDeviceDefValidateFS(dev->data.fs, def, qemuCaps); + break; + + case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_SOUND: case VIR_DOMAIN_DEVICE_HUB: case VIR_DOMAIN_DEVICE_NVRAM: -- 2.19.2

Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index f938ec22d3..803f7ece19 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2703,7 +2703,7 @@ qemuBuildDisksCommandLine(virCommandPtr cmd, static char * qemuBuildFSStr(virDomainFSDefPtr fs) { - virBuffer opt = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) opt = VIR_BUFFER_INITIALIZER; const char *driver = qemuDomainFSDriverTypeToString(fs->fsdriver); const char *wrpolicy = virDomainFSWrpolicyTypeToString(fs->wrpolicy); @@ -2731,13 +2731,9 @@ qemuBuildFSStr(virDomainFSDefPtr fs) virBufferAddLit(&opt, ",readonly"); if (virBufferCheckError(&opt) < 0) - goto error; + return NULL; return virBufferContentAndReset(&opt); - - error: - virBufferFreeAndReset(&opt); - return NULL; } @@ -2746,12 +2742,11 @@ qemuBuildFSDevStr(const virDomainDef *def, virDomainFSDefPtr fs, virQEMUCapsPtr qemuCaps) { - virBuffer opt = VIR_BUFFER_INITIALIZER; + VIR_AUTOCLEAN(virBuffer) opt = VIR_BUFFER_INITIALIZER; if (qemuBuildVirtioDevStr(&opt, "virtio-9p", qemuCaps, - VIR_DOMAIN_DEVICE_FS, fs) < 0) { - goto error; - } + VIR_DOMAIN_DEVICE_FS, fs) < 0) + return NULL; virBufferAsprintf(&opt, ",id=%s", fs->info.alias); virBufferAsprintf(&opt, ",fsdev=%s%s", @@ -2760,19 +2755,15 @@ qemuBuildFSDevStr(const virDomainDef *def, virQEMUBuildBufferEscapeComma(&opt, fs->dst); if (qemuBuildVirtioOptionsStr(&opt, fs->virtio, qemuCaps) < 0) - goto error; + return NULL; if (qemuBuildDeviceAddressStr(&opt, def, &fs->info, qemuCaps) < 0) - goto error; + return NULL; if (virBufferCheckError(&opt) < 0) - goto error; + return NULL; return virBufferContentAndReset(&opt); - - error: - virBufferFreeAndReset(&opt); - return NULL; } -- 2.19.2

Having a translation enum full of empty strings seems excessive. Now that the validiation is performed in qemuDomainDeviceDefValidateFS, remove it completely and open-code the two allowed cases. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 803f7ece19..a0246bbe32 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -179,17 +179,6 @@ VIR_ENUM_IMPL(qemuControllerModelUSB, "none", ); -VIR_ENUM_DECL(qemuDomainFSDriver); -VIR_ENUM_IMPL(qemuDomainFSDriver, - VIR_DOMAIN_FS_DRIVER_TYPE_LAST, - "local", - "local", - "handle", - NULL, - NULL, - NULL, -); - VIR_ENUM_DECL(qemuNumaPolicy); VIR_ENUM_IMPL(qemuNumaPolicy, VIR_DOMAIN_NUMATUNE_MEM_LAST, @@ -2704,13 +2693,11 @@ static char * qemuBuildFSStr(virDomainFSDefPtr fs) { VIR_AUTOCLEAN(virBuffer) opt = VIR_BUFFER_INITIALIZER; - const char *driver = qemuDomainFSDriverTypeToString(fs->fsdriver); const char *wrpolicy = virDomainFSWrpolicyTypeToString(fs->wrpolicy); - virBufferAdd(&opt, driver, -1); - if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_PATH || fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_DEFAULT) { + virBufferAddLit(&opt, "local"); if (fs->accessmode == VIR_DOMAIN_FS_ACCESSMODE_MAPPED) { virBufferAddLit(&opt, ",security_model=mapped"); } else if (fs->accessmode == VIR_DOMAIN_FS_ACCESSMODE_PASSTHROUGH) { @@ -2718,6 +2705,9 @@ qemuBuildFSStr(virDomainFSDefPtr fs) } else if (fs->accessmode == VIR_DOMAIN_FS_ACCESSMODE_SQUASH) { virBufferAddLit(&opt, ",security_model=none"); } + } else if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_HANDLE) { + /* removed since qemu 4.0.0 see v3.1.0-29-g93aee84f57 */ + virBufferAddLit(&opt, "handle"); } if (fs->wrpolicy) -- 2.19.2

On Tue, Jul 16, 2019 at 13:06:48 +0200, Ján Tomko wrote:
Ján Tomko (9): tests: qemu: minimize fs9p.xml qemu: add CAPS_LATEST tests for 9pfs qemu: address: remove useless comment qemu: command: rename qemuBuildFSDevCommandLine qemu: command: re-introduce qemuBuildFSDevCommandLine qemu: command: use VIR_AUTOFREE in qemuBuildFSDevCommandLine qemu: introduce qemuDomainDeviceDefValidateFS qemu: command: use VIR_AUTOCLEAN in qemuBuildFS* qemu: command: remove qemuDomainFSDriver
ACK series
participants (2)
-
Ján Tomko
-
Peter Krempa