]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Incremental.c
Factor common code into new "start_mdmon".
[thirdparty/mdadm.git] / Incremental.c
index 712f2bdb31a57361b07a5534dff7e093dad83d16..9b22220604fc463f9fbba2ebc7fb493ac7d41ac7 100644 (file)
@@ -727,7 +727,7 @@ static char *container2devname(char *devname)
        int fd = open(devname, O_RDONLY);
        char *mdname = NULL;
 
-       if (fd > 0) {
+       if (fd >= 0) {
                mdname = devnum2devname(fd2devnum(fd));
                close(fd);
        }
@@ -836,28 +836,9 @@ int Incremental_container(struct supertype *st, char *devname, int verbose,
                                sysfs_set_str(sra, NULL, "array_state",
                                              "readonly");
                                /* start mdmon if needed. */
-                               if (mdmon_running(st->container_dev))
-                                       signal_mdmon(st->container_dev);
-                               else {
-                                       int dn = st->container_dev;
-                                       int i;
-                                       switch(fork()) {
-                                       case 0:
-                                               /* FIXME yuk. CLOSE_EXEC?? */
-                                               for (i=3; i < 100; i++)
-                                                       close(i);
-                                               execl("./mdmon", "mdmon",
-                                                     map_dev(dev2major(dn),
-                                                             dev2minor(dn),
-                                                             1), NULL);
-                                               exit(1);
-                                       case -1: fprintf(stderr, Name
-                                                        ": cannot fork. "
-                                                 "Array remains readonly\n");
-                                               return 1;
-                                       default: ; /* parent - good */
-                                       }
-                               }
+                               if (!mdmon_running(st->container_dev))
+                                       start_mdmon(st->container_dev);
+                               ping_monitor(devnum2devname(st->container_dev));
                                break;
                        }
                        if (verbose >= 0)