libguestfs/0011-lib-direct-Remove-test-for-qemu-mandatory-locking.patch
Richard W.M. Jones 0b82e08b9e Replace Jansson with json-c
resolves: RHEL-65292
2024-10-30 11:27:45 +00:00

130 lines
5.2 KiB
Diff
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
{