]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mdassemble.c
imsm: fix up assembly of disks that are not in-sync
[thirdparty/mdadm.git] / mdassemble.c
index 1de5688da54108e720b51c8d9df8d395c010cf60..b0d87b8362e7ceee98571d7ae9ceff12f71ba526 100644 (file)
@@ -57,7 +57,7 @@ mapping_t pers[] = {
 /* from mdopen.c */
 int open_mddev(char *dev, int autof/*unused */)
 {
-       int mdfd = open(dev, O_RDWR, 0);
+       int mdfd = open(dev, O_RDWR);
        if (mdfd < 0)
                fprintf(stderr, Name ": error opening %s: %s\n",
                        dev, strerror(errno));
@@ -91,13 +91,14 @@ int main(int argc, char *argv[]) {
                                rv |= 1;
                                continue;
                        }
-                       if (ioctl(mdfd, GET_ARRAY_INFO, &array)>=0)
-                               /* already assembled, skip */
-                               continue;
-                       rv |= Assemble(array_list->st, array_list->devname, mdfd,
-                                          array_list,
-                                          NULL, NULL,
+                       if (ioctl(mdfd, GET_ARRAY_INFO, &array) < 0) {
+                               rv |= Assemble(array_list->st, array_list->devname, mdfd,
+                                          array_list, NULL, NULL,
                                           readonly, runstop, NULL, NULL, verbose, force);
+                       } else {
+                               rv |= Manage_ro(array_list->devname, mdfd, -1); /* make it readwrite */
+                       }
+                       close(mdfd);
                }
        return rv;
 }