]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Mdmonitor: Omit non-md devices
authorLukasz Florczak <lukasz.florczak@linux.intel.com>
Thu, 22 Sep 2022 06:29:50 +0000 (08:29 +0200)
committerJes Sorensen <jsorensen@fb.com>
Thu, 29 Sep 2022 15:12:10 +0000 (11:12 -0400)
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>
Monitor.c

index b4e954c6171f0d22b29fe3281f45b593653ae128..7d7dc4d214234d0b1b64409c1a8c2a79d5cd3cf6 100644 (file)
--- 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);