[Pkg-libvirt-commits] [Git][libvirt-team/libvirt][debian/latest] Fix reboot command for LXC containers (Closes: #991773)
Andrea Bolognani (@abologna)
gitlab at salsa.debian.org
Wed Dec 22 23:39:29 GMT 2021
Andrea Bolognani pushed to branch debian/latest at Libvirt Packaging Team / libvirt
Commits:
9ae5f141 by Joachim Falk at 2021-12-21T21:40:10+01:00
Fix reboot command for LXC containers (Closes: #991773)
- - - - -
2 changed files:
- + debian/patches/backport/Fix-reboot-command-for-LXC-containers.patch
- debian/patches/series
Changes:
=====================================
debian/patches/backport/Fix-reboot-command-for-LXC-containers.patch
=====================================
@@ -0,0 +1,92 @@
+From: Joachim Falk <joachim.falk at gmx.de>
+Date: Thu, 2 Dec 2021 19:56:07 +0100
+Subject: Fix reboot command for LXC containers (Closes: #991773)
+
+The virNetDaemonQuit(dmn) command in virLXCControllerSignalChildIO triggers an
+early close of all clients of lxc_controller. Here, libvirtd itself is a client
+of this controller, and the client connection is used to notify libvirtd if a
+reboot of the container is required. However, the client connection was closed
+before such a status could be sent to libvirtd. To fix this bug, we will
+immediately send the reboot or shutdown status of the container to libvirtd, and
+only after client disconnect will we trigger virNetDaemonQuit (Closes: #991773).
+
+Fixes: https://gitlab.com/libvirt/libvirt/-/issues/237
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=991773
+Signed-off-by: Joachim Falk <joachim.falk at gmx.de>
+Reviewed-by: Michal Privoznik <mprivozn at redhat.com>
+
+(cherry picked from commit 93c47e2c39521aba760486f0238458ef1a37490c)
+---
+ src/lxc/lxc_controller.c | 18 +++++++++++-------
+ 1 file changed, 11 insertions(+), 7 deletions(-)
+
+diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
+index 444f728af4..039efcd7c7 100644
+--- a/src/lxc/lxc_controller.c
++++ b/src/lxc/lxc_controller.c
+@@ -894,8 +894,10 @@ static void virLXCControllerClientCloseHook(virNetServerClient *client)
+ virLXCController *ctrl = virNetServerClientGetPrivateData(client);
+
+ VIR_DEBUG("Client %p has closed", client);
+- if (ctrl->client == client)
++ if (ctrl->client == client) {
+ ctrl->client = NULL;
++ VIR_DEBUG("Client has gone away");
++ }
+ if (ctrl->inShutdown) {
+ VIR_DEBUG("Arm timer to quit event loop");
+ virEventUpdateTimeout(ctrl->timerShutdown, 0);
+@@ -1006,8 +1008,11 @@ static int lxcControllerClearCapabilities(void)
+ static bool wantReboot;
+ static virMutex lock = VIR_MUTEX_INITIALIZER;
+
++static int
++virLXCControllerEventSendExit(virLXCController *ctrl,
++ int exitstatus);
+
+-static void virLXCControllerSignalChildIO(virNetDaemon *dmn,
++static void virLXCControllerSignalChildIO(virNetDaemon *dmn G_GNUC_UNUSED,
+ siginfo_t *info G_GNUC_UNUSED,
+ void *opaque)
+ {
+@@ -1018,7 +1023,6 @@ static void virLXCControllerSignalChildIO(virNetDaemon *dmn,
+ ret = waitpid(-1, &status, WNOHANG);
+ VIR_DEBUG("Got sig child %d vs %lld", ret, (long long)ctrl->initpid);
+ if (ret == ctrl->initpid) {
+- virNetDaemonQuit(dmn);
+ virMutexLock(&lock);
+ if (WIFSIGNALED(status) &&
+ WTERMSIG(status) == SIGHUP) {
+@@ -1026,6 +1030,7 @@ static void virLXCControllerSignalChildIO(virNetDaemon *dmn,
+ wantReboot = true;
+ }
+ virMutexUnlock(&lock);
++ virLXCControllerEventSendExit(ctrl, wantReboot ? 1 : 0);
+ }
+ }
+
+@@ -2276,9 +2281,10 @@ virLXCControllerEventSendExit(virLXCController *ctrl,
+ VIR_DEBUG("Waiting for client to complete dispatch");
+ ctrl->inShutdown = true;
+ virNetServerClientDelayedClose(ctrl->client);
+- virNetDaemonRun(ctrl->daemon);
++ } else {
++ VIR_DEBUG("Arm timer to quit event loop");
++ virEventUpdateTimeout(ctrl->timerShutdown, 0);
+ }
+- VIR_DEBUG("Client has gone away");
+ return 0;
+ }
+
+@@ -2430,8 +2436,6 @@ virLXCControllerRun(virLXCController *ctrl)
+
+ rc = virLXCControllerMain(ctrl);
+
+- virLXCControllerEventSendExit(ctrl, rc);
+-
+ cleanup:
+ VIR_FORCE_CLOSE(control[0]);
+ VIR_FORCE_CLOSE(control[1]);
+--
+2.30.2
+
=====================================
debian/patches/series
=====================================
@@ -1,3 +1,4 @@
+backport/Fix-reboot-command-for-LXC-containers.patch
forward/Skip-vircgrouptest.patch
forward/Reduce-udevadm-settle-timeout-to-10-seconds.patch
forward/Pass-GPG_TTY-env-var-to-the-ssh-binary.patch
View it on GitLab: https://salsa.debian.org/libvirt-team/libvirt/-/commit/9ae5f1419d8d57f573533582d928a78dcf367792
--
View it on GitLab: https://salsa.debian.org/libvirt-team/libvirt/-/commit/9ae5f1419d8d57f573533582d928a78dcf367792
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-libvirt-commits/attachments/20211222/44ce112c/attachment-0001.htm>
More information about the Pkg-libvirt-commits
mailing list