]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Manage.c
Fix typo: wan -> want
[thirdparty/mdadm.git] / Manage.c
index f53fe276e5bcd9f30fd9f14758c9a24fa1fedfd9..102c013b0e809a2a754445ab32e696c539873970 100644 (file)
--- a/Manage.c
+++ b/Manage.c
@@ -416,12 +416,15 @@ int Manage_subdevs(char *devname, int fd,
        int lfd = -1;
        int sysfd = -1;
        int count = 0; /* number of actions taken */
+       struct mdinfo info;
+       int frozen = 0;
 
        if (ioctl(fd, GET_ARRAY_INFO, &array)) {
                fprintf(stderr, Name ": cannot get array info for %s\n",
                        devname);
                goto abort;
        }
+       sysfs_init(&info, fd, 0);
 
        /* array.size is only 32 bit and may be truncated.
         * So read from sysfs if possible, and record number of sectors
@@ -629,6 +632,12 @@ int Manage_subdevs(char *devname, int fd,
                                        dv->devname, strerror(errno));
                                goto abort;
                        }
+                       if (!frozen) {
+                               if (sysfs_freeze_array(&info) == 1)
+                                       frozen = 1;
+                               else
+                                       frozen = -1;
+                       }
 
                        st = dup_super(tst);
 
@@ -657,7 +666,7 @@ int Manage_subdevs(char *devname, int fd,
                                                ": %s is larger than %s can "
                                                "effectively use.\n"
                                                "       Add --force is you "
-                                               "really wan to add this device.\n",
+                                               "really want to add this device.\n",
                                                add_dev, devname);
                                        st->ss->free_super(st);
                                        close(tfd);
@@ -1166,11 +1175,15 @@ int Manage_subdevs(char *devname, int fd,
                        break;
                }
        }
+       if (frozen > 0)
+               sysfs_set_str(&info, NULL, "sync_action","idle");
        if (test && count == 0)
                return 2;
        return 0;
 
 abort:
+       if (frozen > 0)
+               sysfs_set_str(&info, NULL, "sync_action","idle");
        return 1;
 }