diff --git a/libvirt-0.6.3-fix-qemu-argv-detection-with-kvm-85.patch b/libvirt-0.6.3-fix-qemu-argv-detection-with-kvm-85.patch new file mode 100644 index 0000000..5c532a5 --- /dev/null +++ b/libvirt-0.6.3-fix-qemu-argv-detection-with-kvm-85.patch @@ -0,0 +1,82 @@ +From 2b3fcdc378e7bec5c1a78b81632756e92930fd24 Mon Sep 17 00:00:00 2001 +From: Daniel P. Berrange +Date: Mon, 11 May 2009 15:14:24 +0000 +Subject: [PATCH 1/1] Fix QEMU ARGV detection with kvm >= 85 + +--- + src/qemu_conf.c | 18 ++++++++++++++---- + src/qemu_driver.c | 12 ++---------- + 2 files changed, 16 insertions(+), 14 deletions(-) + +diff --git a/src/qemu_conf.c b/src/qemu_conf.c +index 9cb71eb..a57d3ab 100644 +--- a/src/qemu_conf.c ++++ b/src/qemu_conf.c +@@ -431,18 +431,28 @@ int qemudExtractVersionInfo(const char *qemu, + return -1; + + char *help = NULL; +- enum { MAX_HELP_OUTPUT_SIZE = 8192 }; ++ enum { MAX_HELP_OUTPUT_SIZE = 1024*64 }; + int len = virFileReadLimFD(newstdout, MAX_HELP_OUTPUT_SIZE, &help); +- if (len < 0) ++ if (len < 0) { ++ virReportSystemError(NULL, errno, "%s", ++ _("Unable to read QEMU help output")); + goto cleanup2; ++ } + + if (sscanf(help, "QEMU PC emulator version %u.%u.%u (kvm-%u)", + &major, &minor, µ, &kvm_version) != 4) + kvm_version = 0; + +- if (!kvm_version && sscanf(help, "QEMU PC emulator version %u.%u.%u", +- &major, &minor, µ) != 3) ++ if (!kvm_version && ++ sscanf(help, "QEMU PC emulator version %u.%u.%u", ++ &major, &minor, µ) != 3) { ++ char *eol = strchr(help, '\n'); ++ if (eol) *eol = '\0'; ++ qemudReportError(NULL, NULL, NULL, VIR_ERR_INTERNAL_ERROR, ++ _("cannot parse QEMU version number in '%s'"), ++ help); + goto cleanup2; ++ } + + version = (major * 1000 * 1000) + (minor * 1000) + micro; + +diff --git a/src/qemu_driver.c b/src/qemu_driver.c +index 30642d5..bd60b29 100644 +--- a/src/qemu_driver.c ++++ b/src/qemu_driver.c +@@ -1391,12 +1391,8 @@ static int qemudStartVMDaemon(virConnectPtr conn, + + if (qemudExtractVersionInfo(emulator, + NULL, +- &qemuCmdFlags) < 0) { +- qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, +- _("Cannot determine QEMU argv syntax %s"), +- emulator); ++ &qemuCmdFlags) < 0) + goto cleanup; +- } + + if (qemuPrepareHostDevices(conn, vm->def) < 0) + goto cleanup; +@@ -3715,12 +3711,8 @@ static int qemudDomainChangeEjectableMedia(virConnectPtr conn, + + if (qemudExtractVersionInfo(vm->def->emulator, + NULL, +- &qemuCmdFlags) < 0) { +- qemudReportError(conn, dom, NULL, VIR_ERR_INTERNAL_ERROR, +- _("Cannot determine QEMU argv syntax %s"), +- vm->def->emulator); ++ &qemuCmdFlags) < 0) + return -1; +- } + + if (qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE) { + if (!(devname = qemudDiskDeviceName(conn, newdisk))) +-- +1.6.0.6 + diff --git a/libvirt.spec b/libvirt.spec index 83212ef..62d43bb 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -55,7 +55,7 @@ Summary: Library providing a simple API virtualization Name: libvirt Version: 0.6.3 -Release: 8%{?dist}%{?extra_release} +Release: 9%{?dist}%{?extra_release} License: LGPLv2+ Group: Development/Libraries Source: libvirt-%{version}.tar.gz @@ -72,6 +72,8 @@ Patch3: libvirt-0.6.3-refresh-qemu-caps.patch Patch4: libvirt-0.6.3-enable-qemu-0-10-migration.patch # Don't try to label a disk with no path (e.g. empty cdrom) (bz 499569) Patch5: libvirt-0.6.2-fix-nosource-label.patch +# Fix qemu argv detection with latest qemu (bz 501923) +Patch6: libvirt-0.6.3-fix-qemu-argv-detection-with-kvm-85.patch # Patches not for upstream. @@ -232,6 +234,7 @@ of recent versions of Linux (and other OSes). %patch3 -p1 %patch4 -p1 %patch5 -p1 +%patch6 -p1 %patch200 -p0 @@ -562,6 +565,9 @@ fi %endif %changelog +* Thu May 21 2009 Mark McLoughlin - 0.6.3-9.fc12 +- Fix qemu argv detection with latest qemu (bug #501923) + * Sun May 10 2009 Cole Robinson - 0.6.2-8.fc12 - Don't try to label a disk with no path (e.g. empty cdrom) (bug #499569)