]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - Manage.c
Add 'Array Slot' line to --examine for version-1 superblocks
[thirdparty/mdadm.git] / Manage.c
index 8cc977f5138693d0393b947c4be18e38d0d62aa9..a1e152c8ea8b09da79b1d3092d841f6f0d2aefdb 100644 (file)
--- a/Manage.c
+++ b/Manage.c
@@ -1,7 +1,7 @@
 /*
  * mdadm - manage Linux "md" devices aka RAID arrays.
  *
- * Copyright (C) 2001-2002 Neil Brown <neilb@cse.unsw.edu.au>
+ * Copyright (C) 2001-2006 Neil Brown <neilb@suse.de>
  *
  *
  *    This program is free software; you can redistribute it and/or modify
@@ -106,11 +106,13 @@ int Manage_runstop(char *devname, int fd, int runstop, int quiet)
                }
        } else if (runstop < 0){
                if (ioctl(fd, STOP_ARRAY, NULL)) {
-                       if (!quiet)
+                       if (quiet==0)
                                fprintf(stderr, Name ": fail to stop array %s: %s\n",
                                        devname, strerror(errno));
                        return 1;
                }
+               if (quiet <= 0)
+                       fprintf(stderr, Name ": stopped %s\n", devname);
        }
        return 0;
 }
@@ -249,9 +251,9 @@ int Manage_subdevs(char *devname, int fd,
                                                continue;
                                        if ((disc.state & 4)==0) continue; /* sync */
                                        /* Looks like a good device to try */
-                                       dev = map_dev(disc.major, disc.minor);
+                                       dev = map_dev(disc.major, disc.minor, 1);
                                        if (!dev) continue;
-                                       dfd = open(dev, O_RDONLY);
+                                       dfd = dev_open(dev, O_RDONLY);
                                        if (dfd < 0) continue;
                                        if (st->ss->load_super(st, dfd, &dsuper, NULL)) {
                                                close(dfd);
@@ -278,8 +280,7 @@ int Manage_subdevs(char *devname, int fd,
                                                 * based reconstruct is possible
                                                 */
                                                struct mdinfo mdi;
-                                               struct mddev_ident_s ident;
-                                               st->ss->getinfo_super(&mdi, &ident, osuper);
+                                               st->ss->getinfo_super(&mdi, osuper);
                                                disc.major = major(stb.st_rdev);
                                                disc.minor = minor(stb.st_rdev);
                                                disc.number = mdi.disk.number;
@@ -288,7 +289,7 @@ int Manage_subdevs(char *devname, int fd,
                                                if (ioctl(fd, ADD_NEW_DISK, &disc) == 0) {
                                                        if (verbose >= 0)
                                                                fprintf(stderr, Name ": re-added %s\n", dv->devname);
-                                                       return 0;
+                                                       continue;
                                                }
                                                /* fall back on normal-add */
                                        }
@@ -311,7 +312,7 @@ int Manage_subdevs(char *devname, int fd,
                                if (dv->writemostly)
                                        disc.state |= 1 << MD_DISK_WRITEMOSTLY;
                                st->ss->add_to_super(dsuper, &disc);
-                               if (st->ss->write_init_super(st, dsuper, &disc, dv->devname, 0 /* FIXME */))
+                               if (st->ss->write_init_super(st, dsuper, &disc, dv->devname))
                                        return 1;
                        } else if (dv->re_add) {
                                /*  this had better be raid1.
@@ -342,6 +343,8 @@ int Manage_subdevs(char *devname, int fd,
                                                break;
                                        }
                        }
+                       if (dv->writemostly)
+                               disc.state |= (1 << MD_DISK_WRITEMOSTLY);
                        if (ioctl(fd,ADD_NEW_DISK, &disc)) {
                                fprintf(stderr, Name ": add new device failed for %s as %d: %s\n",
                                        dv->devname, j, strerror(errno));