<div dir="ltr">+1 LGTM.<div>Thanks Richard.</div></div><br><div class="gmail_quote"><div dir="ltr">On Fri, Sep 21, 2018 at 12:53 PM Richard W.M. Jones <<a href="mailto:rjones@redhat.com">rjones@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><a href="https://bugs.launchpad.net/qemu/+bug/1740364" rel="noreferrer" target="_blank">https://bugs.launchpad.net/qemu/+bug/1740364</a><br>
---<br>
lib/guestfs-internal.h | 3 +++<br>
lib/handle.c | 2 ++<br>
lib/info.c | 39 +++++++++++++++++++++++++++++++++++++++<br>
3 files changed, 44 insertions(+)<br>
<br>
diff --git a/lib/guestfs-internal.h b/lib/guestfs-internal.h<br>
index adeb9478a..c66c55e70 100644<br>
--- a/lib/guestfs-internal.h<br>
+++ b/lib/guestfs-internal.h<br>
@@ -510,6 +510,9 @@ struct guestfs_h {<br>
/* Cached features. */<br>
struct cached_feature *features;<br>
size_t nr_features;<br>
+<br>
+ /* Used by lib/info.c. -1 = not tested or error; else 0 or 1. */<br>
+ int qemu_img_supports_U_option;<br>
};<br>
<br>
/**<br>
diff --git a/lib/handle.c b/lib/handle.c<br>
index a47aaafab..297ff6d67 100644<br>
--- a/lib/handle.c<br>
+++ b/lib/handle.c<br>
@@ -101,6 +101,8 @@ guestfs_create_flags (unsigned flags, ...)<br>
<br>
g->memsize = DEFAULT_MEMSIZE;<br>
<br>
+ g->qemu_img_supports_U_option = -1; /* not tested, see lib/info.c */<br>
+<br>
/* Start with large serial numbers so they are easy to spot<br>
* inside the protocol.<br>
*/<br>
diff --git a/lib/info.c b/lib/info.c<br>
index 2eadc1c11..74e4424b8 100644<br>
--- a/lib/info.c<br>
+++ b/lib/info.c<br>
@@ -57,6 +57,7 @@ cleanup_json_t_decref (void *ptr)<br>
#endif<br>
<br>
static json_t *get_json_output (guestfs_h *g, const char *filename);<br>
+static int qemu_img_supports_U_option (guestfs_h *g);<br>
static void set_child_rlimits (struct command *);<br>
<br>
char *<br>
@@ -149,6 +150,11 @@ get_json_output (guestfs_h *g, const char *filename)<br>
<br>
guestfs_int_cmd_add_arg (cmd, "qemu-img");<br>
guestfs_int_cmd_add_arg (cmd, "info");<br>
+ switch (qemu_img_supports_U_option (g)) {<br>
+ case -1: return NULL;<br>
+ case 0: break;<br>
+ default: guestfs_int_cmd_add_arg (cmd, "-U");<br>
+ }<br>
guestfs_int_cmd_add_arg (cmd, "--output");<br>
guestfs_int_cmd_add_arg (cmd, "json");<br>
if (filename[0] == '/')<br>
@@ -218,3 +224,36 @@ set_child_rlimits (struct command *cmd)<br>
guestfs_int_cmd_set_child_rlimit (cmd, RLIMIT_CPU, 10 /* seconds */);<br>
#endif<br>
}<br>
+<br>
+/**<br>
+ * Test if the qemu-img info command supports the C<-U> option to<br>
+ * disable locking. The result is memoized in the handle.<br>
+ *<br>
+ * Note this option was added in qemu 2.11. We can remove this test<br>
+ * when we can assume everyone is using qemu >= 2.11.<br>
+ */<br>
+static int<br>
+qemu_img_supports_U_option (guestfs_h *g)<br>
+{<br>
+ if (g->qemu_img_supports_U_option >= 0)<br>
+ return g->qemu_img_supports_U_option;<br>
+<br>
+ CLEANUP_CMD_CLOSE struct command *cmd = guestfs_int_new_command (g);<br>
+ int r;<br>
+<br>
+ guestfs_int_cmd_add_string_unquoted (cmd,<br>
+ "qemu-img info --help | "<br>
+ "grep -sq -- 'info.*-U'");<br>
+ r = guestfs_int_cmd_run (cmd);<br>
+ if (r == -1)<br>
+ return -1;<br>
+ if (!WIFEXITED (r)) {<br>
+ guestfs_int_external_command_failed (g, r,<br>
+ "qemu-img info -U option test",<br>
+ NULL);<br>
+ return -1;<br>
+ }<br>
+<br>
+ g->qemu_img_supports_U_option = WEXITSTATUS (r) == 0;<br>
+ return g->qemu_img_supports_U_option;<br>
+}<br>
-- <br>
2.19.0.rc0<br>
<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><font face="overpass, sans-serif" color="#000000" size="2"><span style="text-transform:uppercase"><b>GAL bEN HAIM</b></span></font><div><span style="color:rgb(0,0,0);font-family:overpass,sans-serif;text-transform:uppercase"><font size="2">RHV DEVOPS</font></span><br></div></div></div>