Blame SOURCES/0061-Mdmonitor-Omit-non-md-devices.patch

37f2b0
From 8b668d4aa3305af5963162b7499b128bd71f8f29 Mon Sep 17 00:00:00 2001
37f2b0
From: Lukasz Florczak <lukasz.florczak@linux.intel.com>
37f2b0
Date: Thu, 22 Sep 2022 08:29:50 +0200
37f2b0
Subject: [PATCH 61/83] Mdmonitor: Omit non-md devices
37f2b0
37f2b0
Fix segfault commit [1] introduced check whether given device is
37f2b0
mddevice, but it happend to terminate Mdmonitor if at least one of given
37f2b0
devices didn't fulfill that condition. In result Mdmonitor service was
37f2b0
no longer started on boot (with --scan option) when config contained some
37f2b0
non-existent array entry.
37f2b0
37f2b0
This commit introduces ommiting non-md devices so scan option can still
37f2b0
be used when config is wrong and allow Mdmonitor service to run on boot.
37f2b0
37f2b0
Giving a list of devices to monitor containing non-existing or
37f2b0
non-md devices will result in monitoring only confirmed mddevices.
37f2b0
37f2b0
[1] https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git/commit/?id=e702f392959d1c2ad2089e595b52235ed97b4e18
37f2b0
37f2b0
Signed-off-by: Lukasz Florczak <lukasz.florczak@linux.intel.com>
37f2b0
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
37f2b0
---
37f2b0
 Monitor.c | 12 ++++--------
37f2b0
 1 file changed, 4 insertions(+), 8 deletions(-)
37f2b0
37f2b0
diff --git a/Monitor.c b/Monitor.c
37f2b0
index b4e954c6..7d7dc4d2 100644
37f2b0
--- a/Monitor.c
37f2b0
+++ b/Monitor.c
37f2b0
@@ -185,10 +185,8 @@ int Monitor(struct mddev_dev *devlist,
37f2b0
 				continue;
37f2b0
 			if (strcasecmp(mdlist->devname, "<ignore>") == 0)
37f2b0
 				continue;
37f2b0
-			if (!is_mddev(mdlist->devname)) {
37f2b0
-				free_statelist(statelist);
37f2b0
-				return 1;
37f2b0
-			}
37f2b0
+			if (!is_mddev(mdlist->devname))
37f2b0
+				continue;
37f2b0
 
37f2b0
 			st = xcalloc(1, sizeof *st);
37f2b0
 			snprintf(st->devname, MD_NAME_MAX + sizeof("/dev/md/"),
37f2b0
@@ -208,10 +206,8 @@ int Monitor(struct mddev_dev *devlist,
37f2b0
 		for (dv = devlist; dv; dv = dv->next) {
37f2b0
 			struct state *st;
37f2b0
 
37f2b0
-			if (!is_mddev(dv->devname)) {
37f2b0
-				free_statelist(statelist);
37f2b0
-				return 1;
37f2b0
-			}
37f2b0
+			if (!is_mddev(dv->devname))
37f2b0
+				continue;
37f2b0
 
37f2b0
 			st = xcalloc(1, sizeof *st);
37f2b0
 			mdlist = conf_get_ident(dv->devname);
37f2b0
-- 
37f2b0
2.38.1
37f2b0