diff options
-rw-r--r-- | Incremental.c | 4 | ||||
-rw-r--r-- | Manage.c | 9 | ||||
-rw-r--r-- | Monitor.c | 6 | ||||
-rw-r--r-- | mdadm.c | 5 | ||||
-rw-r--r-- | mdadm.h | 2 |
5 files changed, 17 insertions, 9 deletions
diff --git a/Incremental.c b/Incremental.c index 7f67535..4f10769 100644 --- a/Incremental.c +++ b/Incremental.c @@ -900,7 +900,7 @@ int IncrementalRemove(char *devname, int verbose) memset(&devlist, 0, sizeof(devlist)); devlist.devname = devname; devlist.disposition = 'f'; - Manage_subdevs(ent->dev, mdfd, &devlist, verbose); + Manage_subdevs(ent->dev, mdfd, &devlist, verbose, 0); devlist.disposition = 'r'; - return Manage_subdevs(ent->dev, mdfd, &devlist, verbose); + return Manage_subdevs(ent->dev, mdfd, &devlist, verbose, 0); } @@ -326,7 +326,7 @@ int Manage_resize(char *devname, int fd, long long size, int raid_disks) } int Manage_subdevs(char *devname, int fd, - mddev_dev_t devlist, int verbose) + mddev_dev_t devlist, int verbose, int test) { /* do something to each dev. * devmode can be @@ -355,6 +355,7 @@ int Manage_subdevs(char *devname, int fd, int ouuid[4]; int lfd = -1; int sysfd = -1; + int count = 0; /* number of actions taken */ if (ioctl(fd, GET_ARRAY_INFO, &array)) { fprintf(stderr, Name ": cannot get array info for %s\n", @@ -684,6 +685,7 @@ int Manage_subdevs(char *devname, int fd, ioctl(fd, ADD_NEW_DISK, &disc) == 0) { if (verbose >= 0) fprintf(stderr, Name ": re-added %s\n", add_dev); + count++; continue; } if (errno == ENOMEM || errno == EROFS) { @@ -959,6 +961,7 @@ int Manage_subdevs(char *devname, int fd, } if (lfd >= 0) close(lfd); + count++; if (verbose >= 0) fprintf(stderr, Name ": hot removed %s from %s\n", dnprintable, devname); @@ -978,14 +981,16 @@ int Manage_subdevs(char *devname, int fd, if (sysfd >= 0) close(sysfd); sysfd = -1; + count++; if (verbose >= 0) fprintf(stderr, Name ": set %s faulty in %s\n", dnprintable, devname); break; } } + if (test && count == 0) + return 2; return 0; - } int autodetect(void) @@ -491,15 +491,15 @@ int Monitor(mddev_dev_t devlist, sprintf(devname, "%d:%d", major(dev), minor(dev)); devlist.disposition = 'r'; - if (Manage_subdevs(st2->devname, fd2, &devlist, -1) == 0) { + if (Manage_subdevs(st2->devname, fd2, &devlist, -1, 0) == 0) { devlist.disposition = 'a'; - if (Manage_subdevs(st->devname, fd1, &devlist, -1) == 0) { + if (Manage_subdevs(st->devname, fd1, &devlist, -1, 0) == 0) { alert("MoveSpare", st->devname, st2->devname, mailaddr, mailfrom, alert_cmd, dosyslog); close(fd1); close(fd2); break; } - else Manage_subdevs(st2->devname, fd2, &devlist, -1); + else Manage_subdevs(st2->devname, fd2, &devlist, -1, 0); } } close(fd1); @@ -796,6 +796,9 @@ int main(int argc, char *argv[]) } runstop = -1; continue; + case O(MANAGE,'t'): + test = 1; + continue; case O(MISC,'Q'): case O(MISC,'D'): @@ -1064,7 +1067,7 @@ int main(int argc, char *argv[]) rv = Manage_ro(devlist->devname, mdfd, readonly); if (!rv && devs_found>1) rv = Manage_subdevs(devlist->devname, mdfd, - devlist->next, verbose-quiet); + devlist->next, verbose-quiet, test); if (!rv && readonly < 0) rv = Manage_ro(devlist->devname, mdfd, readonly); if (!rv && runstop) @@ -769,7 +769,7 @@ extern int Manage_ro(char *devname, int fd, int readonly); extern int Manage_runstop(char *devname, int fd, int runstop, int quiet); extern int Manage_resize(char *devname, int fd, long long size, int raid_disks); extern int Manage_subdevs(char *devname, int fd, - mddev_dev_t devlist, int verbose); + mddev_dev_t devlist, int verbose, int test); extern int autodetect(void); extern int Grow_Add_device(char *devname, int fd, char *newdev); extern int Grow_addbitmap(char *devname, int fd, char *file, int chunk, int delay, int write_behind, int force); |