summaryrefslogtreecommitdiff
path: root/lib/filters
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2022-03-29 17:18:45 -0500
committerDavid Teigland <teigland@redhat.com>2022-04-01 13:38:21 -0500
commit6e22be20c66b85ee161d170571c65b0f383010e4 (patch)
treeaa7c120ff109d6812f71acccc433f90ce1b80068 /lib/filters
parent09371131469f7398c597a5fb30dc565859253cc2 (diff)
downloadlvm2-6e22be20c66b85ee161d170571c65b0f383010e4.tar.gz
devices file: warn about missing multipath entry
Warn if a scsi device is listed in the devices file that is used by a multipath device that is not listed. This will happen if a scsi device is listed in the devices file and then an mpath device is set up to use it. The way to correct this would be to remove the devices file entry for the component device and add a new entry for the multipath device.
Diffstat (limited to 'lib/filters')
-rw-r--r--lib/filters/filter-mpath.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/filters/filter-mpath.c b/lib/filters/filter-mpath.c
index 7644a5b0a..fc7cc51fa 100644
--- a/lib/filters/filter-mpath.c
+++ b/lib/filters/filter-mpath.c
@@ -15,6 +15,7 @@
#include "base/memory/zalloc.h"
#include "lib/misc/lib.h"
#include "lib/filters/filter.h"
+#include "lib/device/device_id.h"
#ifdef __linux__
@@ -22,11 +23,27 @@
static int _ignore_mpath_component(struct cmd_context *cmd, struct dev_filter *f, struct device *dev, const char *use_filter_name)
{
+ dev_t mpath_devno = 0;
+
dev->filtered_flags &= ~DEV_FILTERED_MPATH_COMPONENT;
- if (dev_is_mpath_component(cmd, dev)) {
+ if (dev_is_mpath_component(cmd, dev, &mpath_devno)) {
log_debug_devs("%s: Skipping mpath component device", dev_name(dev));
dev->filtered_flags |= DEV_FILTERED_MPATH_COMPONENT;
+
+ /*
+ * Warn about misconfig where an mpath component is
+ * in the devices file, but its mpath device is not.
+ */
+ if ((dev->flags & DEV_MATCHED_USE_ID) && mpath_devno) {
+ if (!get_du_for_devno(cmd, mpath_devno)) {
+ struct device *mpath_dev = dev_cache_get_by_devt(cmd, mpath_devno);
+ log_warn("WARNING: devices file is missing %s (%d:%d) using multipath component %s.",
+ mpath_dev ? dev_name(mpath_dev) : "unknown",
+ (int)MAJOR(mpath_devno), (int)MINOR(mpath_devno), dev_name(dev));
+ }
+ }
+
return 0;
}