]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Manage.c
imsm: do not mark arrays 'clean' if resync still in progress
[thirdparty/mdadm.git] / Manage.c
index 0c6b59cb06ed3ef2b56a45b9ca20e7b59e0693b1..1a86a859262ce2bc5952d58b188b0406c9f6631d 100644 (file)
--- a/Manage.c
+++ b/Manage.c
@@ -78,13 +78,18 @@ int Manage_runstop(char *devname, int fd, int runstop, int quiet)
 {
        /* Run or stop the array. array must already be configured
         * required >= 0.90.0
+        * Only print failure messages if quiet == 0;
+        * quiet > 0 means really be quiet
+        * quiet < 0 means we will try again if it fails.
         */
        mdu_param_t param; /* unused */
 
        if (runstop == -1 && md_get_version(fd) < 9000) {
                if (ioctl(fd, STOP_MD, 0)) {
-                       if (!quiet) fprintf(stderr, Name ": stopping device %s failed: %s\n",
-                                           devname, strerror(errno));
+                       if (quiet == 0) fprintf(stderr,
+                                               Name ": stopping device %s "
+                                               "failed: %s\n",
+                                               devname, strerror(errno));
                        return 1;
                }
        }
@@ -125,9 +130,9 @@ int Manage_runstop(char *devname, int fd, int runstop, int quiet)
                        close(fd);
                        if (sysfs_set_str(mdi, NULL,
                                          "array_state", "inactive") < 0) {
-                               if (quiet==0)
+                               if (quiet == 0)
                                        fprintf(stderr, Name
-                                               ": fail to stop array %s: %s\n",
+                                               ": failed to stop array %s: %s\n",
                                                devname, strerror(errno));
                                return 1;
                        }
@@ -139,14 +144,23 @@ int Manage_runstop(char *devname, int fd, int runstop, int quiet)
                        ping_monitor(mdi->text_version+1);
 
                        fd = open(devname, O_RDONLY);
+               } else if (mdi &&
+                          mdi->array.major_version == -1 &&
+                          mdi->array.minor_version == -2 &&
+                          mdi->text_version[0] != '/') {
+                       /* container, possibly mdmon-managed.
+                        * Make sure mdmon isn't opening it, which
+                        * would interfere with the 'stop'
+                        */
+                       ping_monitor(mdi->sys_name);
                }
                if (mdi)
                        sysfs_free(mdi);
 
                if (fd >= 0 && ioctl(fd, STOP_ARRAY, NULL)) {
-                       if (quiet==0)
+                       if (quiet == 0)
                                fprintf(stderr, Name
-                                       ": fail to stop array %s: %s\n",
+                                       ": failed to stop array %s: %s\n",
                                        devname, strerror(errno));
                        return 1;
                }