]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mdmon.c
imsm: turn off curr_migr_unit updates
[thirdparty/mdadm.git] / mdmon.c
diff --git a/mdmon.c b/mdmon.c
index 7c5fae5fa8e367054f2ae261226098e54cec8519..5e39437c01b14986f1d9bdd446909700ba175641 100644 (file)
--- a/mdmon.c
+++ b/mdmon.c
@@ -271,7 +271,7 @@ static int do_fork(void)
 
 void usage(void)
 {
-       fprintf(stderr, "Usage: mdmon [--switch-root dir] /device/name/for/container\n");
+       fprintf(stderr, "Usage: mdmon /device/name/for/container [target_dir]\n");
        exit(2);
 }
 
@@ -287,17 +287,11 @@ int main(int argc, char *argv[])
        int status = 0;
 
        switch (argc) {
+       case 3:
+               switchroot = argv[2];
        case 2:
                container_name = argv[1];
                break;
-       case 4:
-               if (strcmp(argv[1], "--switch-root") != 0) {
-                       fprintf(stderr, "mdmon: unknown argument %s\n", argv[1]);
-                       usage();
-               }
-               switchroot = argv[2];
-               container_name = argv[3];
-               break;
        default:
                usage();
        }
@@ -312,6 +306,13 @@ int main(int argc, char *argv[])
                        if (strncmp(e->metadata_version, "external:", 9) == 0 &&
                            !is_subarray(&e->metadata_version[9])) {
                                devname = devnum2devname(e->devnum);
+                               /* update cmdline so this mdmon instance can be
+                                * distinguished from others in a call to ps(1)
+                                */
+                               if (strlen(devname) <= strlen(container_name)) {
+                                       memset(container_name, 0, strlen(container_name));
+                                       sprintf(container_name, "%s", devname);
+                               }
                                status |= mdmon(devname, e->devnum, scan,
                                                switchroot);
                        }
@@ -355,6 +356,8 @@ int mdmon(char *devname, int devnum, int scan, char *switchroot)
        int status;
        int ignore;
 
+       dprintf("starting mdmon for %s in %s\n",
+               devname, switchroot ? : "/");
        mdfd = open_dev(devnum);
        if (mdfd < 0) {
                fprintf(stderr, "mdmon: %s: %s\n", devname,
@@ -404,7 +407,7 @@ int mdmon(char *devname, int devnum, int scan, char *switchroot)
        }
 
        mdi = sysfs_read(mdfd, container->devnum,
-                        GET_VERSION|GET_LEVEL|GET_DEVS);
+                        GET_VERSION|GET_LEVEL|GET_DEVS|SKIP_GONE_DEVS);
 
        if (!mdi) {
                fprintf(stderr, "mdmon: failed to load sysfs info for %s\n",