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