libguestfs/0011-lib-direct-Remove-test-for-qemu-mandatory-locking.patch

130 lines
5.2 KiB
Diff
Raw Normal View History

From 47857751a78108617e1e25d4949564bc2a182381 Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Tue, 22 Oct 2024 16:23:07 +0100
Subject: [PATCH] lib: direct: Remove test for qemu mandatory locking
We tested for QEMU >= 2.10 support for mandatory locking. I believe
this is for all practical purposes always enabled now (and qemu 2.10
is ancient history) so simply assume it's true always.
---
lib/guestfs-internal.h | 1 -
lib/launch-direct.c | 19 ++++++-----------
lib/qemu.c | 48 ------------------------------------------
3 files changed, 7 insertions(+), 61 deletions(-)
diff --git a/lib/guestfs-internal.h b/lib/guestfs-internal.h
index f9f4628a..bb3772cb 100644
--- a/lib/guestfs-internal.h
+++ b/lib/guestfs-internal.h
@@ -796,7 +796,6 @@ extern struct qemu_data *guestfs_int_test_qemu (guestfs_h *g);
extern struct version guestfs_int_qemu_version (guestfs_h *g, struct qemu_data *);
extern int guestfs_int_qemu_supports (guestfs_h *g, const struct qemu_data *, const char *option);
extern int guestfs_int_qemu_supports_device (guestfs_h *g, const struct qemu_data *, const char *device_name);
-extern int guestfs_int_qemu_mandatory_locking (guestfs_h *g, const struct qemu_data *data);
extern bool guestfs_int_platform_has_kvm (guestfs_h *g, const struct qemu_data *data);
extern char *guestfs_int_drive_source_qemu_param (guestfs_h *g, const struct drive_source *src);
extern bool guestfs_int_discard_possible (guestfs_h *g, struct drive *drv, const struct version *qemu_version);
diff --git a/lib/launch-direct.c b/lib/launch-direct.c
index cdfd25a9..9d0c2215 100644
--- a/lib/launch-direct.c
+++ b/lib/launch-direct.c
@@ -57,7 +57,6 @@ struct backend_direct_data {
pid_t recoverypid; /* Recovery process PID. */
struct version qemu_version; /* qemu version (0 if unable to parse). */
- int qemu_mandatory_locking; /* qemu >= 2.10 does mandatory locking */
struct qemu_data *qemu_data; /* qemu -help output etc. */
char guestfsd_sock[UNIX_PATH_MAX]; /* Path to daemon socket. */
@@ -240,13 +239,13 @@ add_drive_standard_params (guestfs_h *g, struct backend_direct_data *data,
}
}
else {
- /* Writable qcow2 overlay on top of read-only drive. */
- if (data->qemu_mandatory_locking &&
- /* Add the file-specific locking option only for files, as
- * qemu won't accept options unknown to the block driver in
- * use.
- */
- drv->src.protocol == drive_protocol_file) {
+ /* Writable qcow2 overlay on top of read-only drive.
+ *
+ * Add the file-specific locking option only for files, as
+ * qemu won't accept options unknown to the block driver in
+ * use.
+ */
+ if (drv->src.protocol == drive_protocol_file) {
append_list_format ("file.file.filename=%s", drv->overlay);
append_list ("file.driver=qcow2");
append_list ("file.backing.file.locking=off");
@@ -495,10 +494,6 @@ launch_direct (guestfs_h *g, void *datav, const char *arg)
data->qemu_version = guestfs_int_qemu_version (g, data->qemu_data);
debug (g, "qemu version: %d.%d",
data->qemu_version.v_major, data->qemu_version.v_minor);
- data->qemu_mandatory_locking =
- guestfs_int_qemu_mandatory_locking (g, data->qemu_data);
- debug (g, "qemu mandatory locking: %s",
- data->qemu_mandatory_locking ? "yes" : "no");
}
/* Work out if KVM is supported or if the user wants to force TCG. */
diff --git a/lib/qemu.c b/lib/qemu.c
index 886c92e5..f9270771 100644
--- a/lib/qemu.c
+++ b/lib/qemu.c
@@ -662,54 +662,6 @@ guestfs_int_qemu_supports_device (guestfs_h *g,
return strstr (data->qemu_devices, device_name) != NULL;
}
-/**
- * Test if the qemu binary uses mandatory file locking, added in
- * QEMU >= 2.10 (but sometimes disabled).
- */
-int
-guestfs_int_qemu_mandatory_locking (guestfs_h *g,
- const struct qemu_data *data)
-{
- json_t *schema, *v, *meta_type, *members, *m, *name;
- size_t i, j;
-
- /* If there's no QMP schema, fall back to checking the version. */
- if (!data->qmp_schema_tree) {
- fallback:
- return guestfs_int_version_ge (&data->qemu_version, 2, 10, 0);
- }
-
- /* Top element of qmp_schema_tree is the { "return": ... } wrapper.
- * Extract the schema from the wrapper. Note the returned schema
- * will be an array.
- */
- schema = json_object_get (data->qmp_schema_tree, "return");
- if (!json_is_array (schema))
- goto fallback;
-
- /* Now look for any member of the array which has:
- * { "meta-type": "object",
- * "members": [ ... { "name": "locking", ... } ... ] ... }
- */
- json_array_foreach (schema, i, v) {
- meta_type = json_object_get (v, "meta-type");
- if (json_is_string (meta_type) &&
- STREQ (json_string_value (meta_type), "object")) {
- members = json_object_get (v, "members");
- if (json_is_array (members)) {
- json_array_foreach (members, j, m) {
- name = json_object_get (m, "name");
- if (json_is_string (name) &&
- STREQ (json_string_value (name), "locking"))
- return 1;
- }
- }
- }
- }
-
- return 0;
-}
-
bool
guestfs_int_platform_has_kvm (guestfs_h *g, const struct qemu_data *data)
{