Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP7:GA
libvirt.16732
feb8564a-handle-no-devmapper.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File feb8564a-handle-no-devmapper.patch of Package libvirt.16732
commit feb8564a3cc63bc8f68284063d53ec0d2d81a1cc Author: Michal Prívozník <mprivozn@redhat.com> Date: Tue Aug 18 11:04:24 2020 +0200 virdevmapper: Handle kernel without device-mapper support In one of my latest patch (v6.6.0~30) I was trying to remove libdevmapper use in favor of our own implementation. However, the code did not take into account that device mapper can be not compiled into the kernel (e.g. be a separate module that's not loaded) in which case /proc/devices won't have the device-mapper major number and thus virDevMapperGetTargets() and/or virIsDevMapperDevice() fails. However, such failure is safe to ignore, because if device mapper is missing then there can't be any multipath devices and thus we don't need to allow the deps in CGroups, nor create them in the domain private namespace, etc. Fixes: 22494556542c676d1b9e7f1c1f2ea13ac17e1e3e Reported-by: Andrea Bolognani <abologna@redhat.com> Reported-by: Christian Ehrhardt <christian.ehrhardt@canonical.com> Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com> Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com> Index: libvirt-6.0.0/src/util/virdevmapper.c =================================================================== --- libvirt-6.0.0.orig/src/util/virdevmapper.c +++ libvirt-6.0.0/src/util/virdevmapper.c @@ -56,6 +56,9 @@ virDevMapperOnceInit(void) VIR_AUTOSTRINGLIST lines = NULL; size_t i; + if (!virFileExists(CONTROL_PATH)) + return -2; + if (virFileReadAll(PROC_DEVICES, BUF_SIZE, &buf) < 0) return -1; @@ -131,8 +134,13 @@ virDMOpen(void) memset(&dm, 0, sizeof(dm)); - if ((controlFD = open(CONTROL_PATH, O_RDWR)) < 0) + if ((controlFD = open(CONTROL_PATH, O_RDWR)) < 0) { + if (errno == ENOENT) + return -2; + + virReportSystemError(errno, _("Unable to open %s"), CONTROL_PATH); return -1; + } if (!virDMIoctl(controlFD, DM_VERSION, &dm, &tmp)) { virReportSystemError(errno, "%s", @@ -310,16 +318,28 @@ virDevMapperGetTargets(const char *path, { VIR_AUTOCLOSE controlFD = -1; const unsigned int ttl = 32; + int ret; /* Arbitrary limit on recursion level. A devmapper target can * consist of devices or yet another targets. If that's the * case, we have to stop recursion somewhere. */ - if (virDevMapperInitialize() < 0) + ret = virDevMapperInitialize(); + if (ret == -2) + return 0; + if (ret == -1) return -1; - if ((controlFD = virDMOpen()) < 0) + if ((controlFD = virDMOpen()) < 0) { + if (controlFD == -2) { + /* The CONTROL_PATH doesn't exist. Probably the + * module isn't loaded, yet. Don't error out, just + * exit. */ + return 0; + } + return -1; + } return virDevMapperGetTargetsImpl(controlFD, path, devPaths, ttl); }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor