]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
mdadm: add an environment variable to prevent auto-launching mdmon
authorDan Williams <dan.j.williams@intel.com>
Mon, 14 Jul 2008 21:59:32 +0000 (14:59 -0700)
committerDan Williams <dan.j.williams@intel.com>
Mon, 14 Jul 2008 21:59:32 +0000 (14:59 -0700)
Useful for attaching gdb to mdmon before any action is taken on the array.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Create.c
Incremental.c
mdadm.h
util.c

index bef221ad61deb37cea10e70d73f573130663f833..c51b7eb04ddd7e83d0f8a8f4d3590f3b6a85ed3c 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -767,7 +767,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
                if (verbose >= 0)
                        fprintf(stderr, Name ": array %s started.\n", mddev);
                if (st->ss->external && st->subarray[0]) {
-                       if (need_mdmon) {
+                       if (need_mdmon && !env_no_mdmon()) {
                                int dn = st->container_dev;
                                int i;
                                switch(fork()) {
index 266111ae416685361250420478f2e19ece3636cd..e9a54578a711b4fddef00d92136534f2b21bc52f 100644 (file)
@@ -838,7 +838,7 @@ int Incremental_container(struct supertype *st, char *devname, int verbose,
                                /* start mdmon if needed. */
                                if (mdmon_running(st->container_dev))
                                        signal_mdmon(st->container_dev);
-                               else {
+                               else if (!env_no_mdmon()) {
                                        int dn = st->container_dev;
                                        int i;
                                        switch(fork()) {
diff --git a/mdadm.h b/mdadm.h
index 72104da141efd11e7e7988ff7a405561f3269fdd..3672bc9daad2744e8f587496e64251420ca1ab13 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -773,6 +773,7 @@ extern int open_container(int fd);
 
 extern int mdmon_running(int devnum);
 extern int signal_mdmon(int devnum);
+extern int env_no_mdmon(void);
 
 extern char *devnum2devname(int num);
 extern int devname2devnum(char *name);
diff --git a/util.c b/util.c
index 0c1dfeebfa94ca96b56ee3a1e2fb6d5226fd38af..283eeb6d4118ae656d985ce13654f77d411eb134 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1074,6 +1074,16 @@ int signal_mdmon(int devnum)
        return 0;
 }
 
+int env_no_mdmon(void)
+{
+       char *val = getenv("MDADM_NO_MDMON");
+
+       if (val && atoi(val) == 1)
+               return 1;
+
+       return 0;
+}
+
 
 int flush_metadata_updates(struct supertype *st)
 {