]> git.proxmox.com Git - pve-qemu.git/commitdiff
init: daemonize: defuse PID file resolve error to warning
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Fri, 28 Oct 2022 08:22:21 +0000 (10:22 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Fri, 28 Oct 2022 08:22:26 +0000 (10:22 +0200)
fixes file restore, where we actively unlink the PID file of the
transient VM ourself after opening it - while we use it only for
tracking when the QEMU process itself has finished start up, it's
easier and cleaner to fix this regression now, than to rework that to
something that doesn't depends on the PID file at all.

Applying Fiona's patch as patch-patch tracked under extra, as I
expect that something similar to this gets accepted upstreamed.

Link: https://lists.proxmox.com/pipermail/pve-devel/2022-October/054448.html
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
debian/patches/extra/0005-init-daemonize-defuse-PID-file-resolve-error.patch [new file with mode: 0644]
debian/patches/series

diff --git a/debian/patches/extra/0005-init-daemonize-defuse-PID-file-resolve-error.patch b/debian/patches/extra/0005-init-daemonize-defuse-PID-file-resolve-error.patch
new file mode 100644 (file)
index 0000000..49890a2
--- /dev/null
@@ -0,0 +1,42 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Fiona Ebner <f.ebner@proxmox.com>
+Date: Fri, 28 Oct 2022 10:09:46 +0200
+Subject: [PATCH] init: daemonize: defuse PID file resolve error
+
+When proxmox-file-restore invokes QEMU, the PID file is a (temporary)
+file that's already unlinked, so resolving the absolute path here
+failed.
+
+It should not be a critical error when the PID file unlink handler
+can't be registered, because the path can't be resolved for whatever
+reason. If the file is already gone from QEMU's perspective (i.e.
+errno is ENOENT), silently ignore the error. Otherwise, print a
+warning.
+
+Reported-by: Dominik Csapak <d.csapak@proxmox.com>
+Suggested-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
+Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
+---
+ softmmu/vl.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/softmmu/vl.c b/softmmu/vl.c
+index 706bd7cff7..3381c56af7 100644
+--- a/softmmu/vl.c
++++ b/softmmu/vl.c
+@@ -2438,10 +2438,11 @@ static void qemu_maybe_daemonize(const char *pid_file)
+         pid_file_realpath = g_malloc0(PATH_MAX);
+         if (!realpath(pid_file, pid_file_realpath)) {
+-            error_report("cannot resolve PID file path: %s: %s",
+-                         pid_file, strerror(errno));
+-            unlink(pid_file);
+-            exit(1);
++            if (errno != ENOENT) {
++                warn_report("not removing PID file on exit: cannot resolve PID "
++                            "file path: %s: %s", pid_file, strerror(errno));
++            }
++            return;
+         }
+         qemu_unlink_pidfile_notifier = (struct UnlinkPidfileNotifier) {
index 326313b4cc7b2fed8a5ef9c7b931b0c6793572d8..6dbf2b1906419f08103f1ed801f48c21b4569376 100644 (file)
@@ -2,6 +2,7 @@ extra/0001-monitor-qmp-fix-race-with-clients-disconnecting-earl.patch
 extra/0002-block-io_uring-revert-Use-io_uring_register_ring_fd-.patch
 extra/0003-virtiofsd-use-g_date_time_get_microsecond-to-get-sub.patch
 extra/0004-chardev-fix-segfault-in-finalize.patch
+extra/0005-init-daemonize-defuse-PID-file-resolve-error.patch
 bitmap-mirror/0001-drive-mirror-add-support-for-sync-bitmap-mode-never.patch
 bitmap-mirror/0002-drive-mirror-add-support-for-conditional-and-always-.patch
 bitmap-mirror/0003-mirror-add-check-for-bitmap-mode-without-bitmap.patch