On Friday, 21 September 2018 11:53:52 CEST Richard W.M. Jones wrote:
+/**
+ * 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 info --help | "
+ "grep -sq -- 'info.*-U'");
This may match something else in future, in case some other command of
qemu-img gets another option with "info" in it...
TBH this is something we have already, and precisely in the qemu_data
struct, which is memoized. One downside is that using it would mean
memoizing the qemu help/schema in advance, even if the appliance is not
started; so code like `guestfish disk-format foo` will be slower.
OTOH, the upside is that there is no need to "reprobe" qemu-img for
something that we detect already from the QMP schema.
One possible idea can be to cache the qemu_data struct in the handle,
so the direct backend would not get a performance regression (since
either one of the info commands already preloaded a qemu_data, or
launch would do that).
--
Pino Toscano