Small fix for qemu behaviour (RHBZ#1664318).
This commit is contained in:
parent
6ae06d4e94
commit
2404f718a0
103
0001-lib-Use-qemu-img-info-U-option-to-avoid-locking-erro.patch
Normal file
103
0001-lib-Use-qemu-img-info-U-option-to-avoid-locking-erro.patch
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
From f00f920ad3b15ab8e9e8f201c16e7628b6b7b109 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
|
Date: Wed, 12 Sep 2018 17:16:20 +0100
|
||||||
|
Subject: [PATCH] lib: Use qemu-img info -U option to avoid locking error.
|
||||||
|
|
||||||
|
https://bugs.launchpad.net/qemu/+bug/1740364
|
||||||
|
---
|
||||||
|
lib/guestfs-internal.h | 3 +++
|
||||||
|
lib/handle.c | 2 ++
|
||||||
|
lib/info.c | 39 +++++++++++++++++++++++++++++++++++++++
|
||||||
|
3 files changed, 44 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/lib/guestfs-internal.h b/lib/guestfs-internal.h
|
||||||
|
index 471244264..6c339ae81 100644
|
||||||
|
--- a/lib/guestfs-internal.h
|
||||||
|
+++ b/lib/guestfs-internal.h
|
||||||
|
@@ -510,6 +510,9 @@ struct guestfs_h {
|
||||||
|
/* Cached features. */
|
||||||
|
struct cached_feature *features;
|
||||||
|
size_t nr_features;
|
||||||
|
+
|
||||||
|
+ /* Used by lib/info.c. -1 = not tested or error; else 0 or 1. */
|
||||||
|
+ int qemu_img_supports_U_option;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
diff --git a/lib/handle.c b/lib/handle.c
|
||||||
|
index a47aaafab..297ff6d67 100644
|
||||||
|
--- a/lib/handle.c
|
||||||
|
+++ b/lib/handle.c
|
||||||
|
@@ -101,6 +101,8 @@ guestfs_create_flags (unsigned flags, ...)
|
||||||
|
|
||||||
|
g->memsize = DEFAULT_MEMSIZE;
|
||||||
|
|
||||||
|
+ g->qemu_img_supports_U_option = -1; /* not tested, see lib/info.c */
|
||||||
|
+
|
||||||
|
/* Start with large serial numbers so they are easy to spot
|
||||||
|
* inside the protocol.
|
||||||
|
*/
|
||||||
|
diff --git a/lib/info.c b/lib/info.c
|
||||||
|
index 2eadc1c11..4dee7a26a 100644
|
||||||
|
--- a/lib/info.c
|
||||||
|
+++ b/lib/info.c
|
||||||
|
@@ -57,6 +57,7 @@ cleanup_json_t_decref (void *ptr)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static json_t *get_json_output (guestfs_h *g, const char *filename);
|
||||||
|
+static int qemu_img_supports_U_option (guestfs_h *g);
|
||||||
|
static void set_child_rlimits (struct command *);
|
||||||
|
|
||||||
|
char *
|
||||||
|
@@ -149,6 +150,11 @@ get_json_output (guestfs_h *g, const char *filename)
|
||||||
|
|
||||||
|
guestfs_int_cmd_add_arg (cmd, "qemu-img");
|
||||||
|
guestfs_int_cmd_add_arg (cmd, "info");
|
||||||
|
+ switch (qemu_img_supports_U_option (g)) {
|
||||||
|
+ case -1: return NULL;
|
||||||
|
+ case 0: break;
|
||||||
|
+ default: guestfs_int_cmd_add_arg (cmd, "-U");
|
||||||
|
+ }
|
||||||
|
guestfs_int_cmd_add_arg (cmd, "--output");
|
||||||
|
guestfs_int_cmd_add_arg (cmd, "json");
|
||||||
|
if (filename[0] == '/')
|
||||||
|
@@ -218,3 +224,36 @@ set_child_rlimits (struct command *cmd)
|
||||||
|
guestfs_int_cmd_set_child_rlimit (cmd, RLIMIT_CPU, 10 /* seconds */);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * Test if the qemu-img info command supports the C<-U> option to
|
||||||
|
+ * disable locking. The result is memoized in the handle.
|
||||||
|
+ *
|
||||||
|
+ * Note this option was added in qemu 2.11. We can remove this test
|
||||||
|
+ * when we can assume everyone is using qemu >= 2.11.
|
||||||
|
+ */
|
||||||
|
+static int
|
||||||
|
+qemu_img_supports_U_option (guestfs_h *g)
|
||||||
|
+{
|
||||||
|
+ if (g->qemu_img_supports_U_option >= 0)
|
||||||
|
+ return g->qemu_img_supports_U_option;
|
||||||
|
+
|
||||||
|
+ CLEANUP_CMD_CLOSE struct command *cmd = guestfs_int_new_command (g);
|
||||||
|
+ int r;
|
||||||
|
+
|
||||||
|
+ guestfs_int_cmd_add_string_unquoted (cmd,
|
||||||
|
+ "qemu-img --help | "
|
||||||
|
+ "grep -sqE -- '\\binfo\\b.*-U\\b'");
|
||||||
|
+ r = guestfs_int_cmd_run (cmd);
|
||||||
|
+ if (r == -1)
|
||||||
|
+ return -1;
|
||||||
|
+ if (!WIFEXITED (r)) {
|
||||||
|
+ guestfs_int_external_command_failed (g, r,
|
||||||
|
+ "qemu-img info -U option test",
|
||||||
|
+ NULL);
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ g->qemu_img_supports_U_option = WEXITSTATUS (r) == 0;
|
||||||
|
+ return g->qemu_img_supports_U_option;
|
||||||
|
+}
|
||||||
|
--
|
||||||
|
2.19.2
|
||||||
|
|
@ -50,6 +50,9 @@ Source0: http://libguestfs.org/download/1.38-stable/%{name}-%{version}.tar
|
|||||||
Source1: http://libguestfs.org/download/1.38-stable/%{name}-%{version}.tar.gz.sig
|
Source1: http://libguestfs.org/download/1.38-stable/%{name}-%{version}.tar.gz.sig
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=1664318
|
||||||
|
Patch1: 0001-lib-Use-qemu-img-info-U-option-to-avoid-locking-erro.patch
|
||||||
|
|
||||||
# Replacement README file for Fedora users.
|
# Replacement README file for Fedora users.
|
||||||
Source4: README-replacement.in
|
Source4: README-replacement.in
|
||||||
|
|
||||||
@ -1404,6 +1407,9 @@ install -m 0644 utils/boot-benchmark/boot-benchmark.1 $RPM_BUILD_ROOT%{_mandir}/
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Jan 08 2019 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.11-3
|
||||||
|
- Small fix for qemu behaviour (RHBZ#1664318).
|
||||||
|
|
||||||
* Fri Oct 12 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.11-2
|
* Fri Oct 12 2018 Richard W.M. Jones <rjones@redhat.com> - 1:1.39.11-2
|
||||||
- lib: Add Recommends for libvirt-daemon-config-network so that networking
|
- lib: Add Recommends for libvirt-daemon-config-network so that networking
|
||||||
works out of the box.
|
works out of the box.
|
||||||
|
Loading…
Reference in New Issue
Block a user