|
|
7b551b |
From a9c950dcbac1f708bcd01111d4ec9b550db37fe3 Mon Sep 17 00:00:00 2001
|
|
|
7b551b |
Message-Id: <a9c950dcbac1f708bcd01111d4ec9b550db37fe3@dist-git>
|
|
|
7b551b |
From: Michal Privoznik <mprivozn@redhat.com>
|
|
|
7b551b |
Date: Tue, 25 Aug 2020 17:16:06 +0200
|
|
|
7b551b |
Subject: [PATCH] virdevmapper: Handle kernel without device-mapper support
|
|
|
7b551b |
|
|
|
7b551b |
In one of my latest patch (v6.6.0~30) I was trying to remove
|
|
|
7b551b |
libdevmapper use in favor of our own implementation. However, the
|
|
|
7b551b |
code did not take into account that device mapper can be not
|
|
|
7b551b |
compiled into the kernel (e.g. be a separate module that's not
|
|
|
7b551b |
loaded) in which case /proc/devices won't have the device-mapper
|
|
|
7b551b |
major number and thus virDevMapperGetTargets() and/or
|
|
|
7b551b |
virIsDevMapperDevice() fails.
|
|
|
7b551b |
|
|
|
7b551b |
However, such failure is safe to ignore, because if device mapper
|
|
|
7b551b |
is missing then there can't be any multipath devices and thus we
|
|
|
7b551b |
don't need to allow the deps in CGroups, nor create them in the
|
|
|
7b551b |
domain private namespace, etc.
|
|
|
7b551b |
|
|
|
7b551b |
Fixes: 22494556542c676d1b9e7f1c1f2ea13ac17e1e3e
|
|
|
7b551b |
Reported-by: Andrea Bolognani <abologna@redhat.com>
|
|
|
7b551b |
Reported-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
|
|
7b551b |
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
|
|
7b551b |
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
|
|
7b551b |
Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
|
|
7b551b |
Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
|
|
7b551b |
(cherry picked from commit feb8564a3cc63bc8f68284063d53ec0d2d81a1cc)
|
|
|
7b551b |
|
|
|
7b551b |
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1860421
|
|
|
7b551b |
|
|
|
7b551b |
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
|
|
7b551b |
Message-Id: <71fcd93071dffdf4942ccce8671af7fcbcec397f.1598364552.git.mprivozn@redhat.com>
|
|
|
7b551b |
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
7b551b |
---
|
|
|
7b551b |
src/util/virdevmapper.c | 20 ++++++++++++++++++--
|
|
|
7b551b |
1 file changed, 18 insertions(+), 2 deletions(-)
|
|
|
7b551b |
|
|
|
7b551b |
diff --git a/src/util/virdevmapper.c b/src/util/virdevmapper.c
|
|
|
7b551b |
index b43dbefa9a..a81e2edee4 100644
|
|
|
7b551b |
--- a/src/util/virdevmapper.c
|
|
|
7b551b |
+++ b/src/util/virdevmapper.c
|
|
|
7b551b |
@@ -54,6 +54,9 @@ virDevMapperGetMajor(unsigned int *major)
|
|
|
7b551b |
VIR_AUTOSTRINGLIST lines = NULL;
|
|
|
7b551b |
size_t i;
|
|
|
7b551b |
|
|
|
7b551b |
+ if (!virFileExists(CONTROL_PATH))
|
|
|
7b551b |
+ return -2;
|
|
|
7b551b |
+
|
|
|
7b551b |
if (virFileReadAll(PROC_DEVICES, BUF_SIZE, &buf) < 0)
|
|
|
7b551b |
return -1;
|
|
|
7b551b |
|
|
|
7b551b |
@@ -126,8 +129,13 @@ virDMOpen(void)
|
|
|
7b551b |
|
|
|
7b551b |
memset(&dm, 0, sizeof(dm));
|
|
|
7b551b |
|
|
|
7b551b |
- if ((controlFD = open(CONTROL_PATH, O_RDWR)) < 0)
|
|
|
7b551b |
+ if ((controlFD = open(CONTROL_PATH, O_RDWR)) < 0) {
|
|
|
7b551b |
+ if (errno == ENOENT)
|
|
|
7b551b |
+ return -2;
|
|
|
7b551b |
+
|
|
|
7b551b |
+ virReportSystemError(errno, _("Unable to open %s"), CONTROL_PATH);
|
|
|
7b551b |
return -1;
|
|
|
7b551b |
+ }
|
|
|
7b551b |
|
|
|
7b551b |
if (!virDMIoctl(controlFD, DM_VERSION, &dm, &tmp)) {
|
|
|
7b551b |
virReportSystemError(errno, "%s",
|
|
|
7b551b |
@@ -300,8 +308,16 @@ virDevMapperGetTargets(const char *path,
|
|
|
7b551b |
* consist of devices or yet another targets. If that's the
|
|
|
7b551b |
* case, we have to stop recursion somewhere. */
|
|
|
7b551b |
|
|
|
7b551b |
- if ((controlFD = virDMOpen()) < 0)
|
|
|
7b551b |
+ if ((controlFD = virDMOpen()) < 0) {
|
|
|
7b551b |
+ if (controlFD == -2) {
|
|
|
7b551b |
+ /* The CONTROL_PATH doesn't exist. Probably the
|
|
|
7b551b |
+ * module isn't loaded, yet. Don't error out, just
|
|
|
7b551b |
+ * exit. */
|
|
|
7b551b |
+ return 0;
|
|
|
7b551b |
+ }
|
|
|
7b551b |
+
|
|
|
7b551b |
return -1;
|
|
|
7b551b |
+ }
|
|
|
7b551b |
|
|
|
7b551b |
return virDevMapperGetTargetsImpl(controlFD, path, devPaths, ttl);
|
|
|
7b551b |
}
|
|
|
7b551b |
--
|
|
|
7b551b |
2.28.0
|
|
|
7b551b |
|