diff options
author | Dimitri John Ledkov <xnox@ubuntu.com> | 2017-05-12 12:32:07 +0100 |
---|---|---|
committer | Dimitri John Ledkov <xnox@ubuntu.com> | 2017-05-12 12:32:07 +0100 |
commit | 77b19ed5f259bc62680acf2b1a3454baa2472bc5 (patch) | |
tree | 7441d8d057c09e54c8ea23c984f2ccdf22c98649 /mdadm.c | |
parent | ca114f3c76374493f0fd64f8ea0a9b96ae9b1dc5 (diff) |
New upstream release.
Diffstat (limited to 'mdadm.c')
-rw-r--r-- | mdadm.c | 123 |
1 files changed, 68 insertions, 55 deletions
@@ -89,7 +89,8 @@ int main(int argc, char *argv[]) int oneshot = 0; int spare_sharing = 1; struct supertype *ss = NULL; - int writemostly = 0; + enum flag_mode writemostly = FlagDefault; + enum flag_mode failfast = FlagDefault; char *shortopt = short_options; int dosyslog = 0; int rebuild_map = 0; @@ -143,9 +144,9 @@ int main(int argc, char *argv[]) continue; case 'b': - if (mode == ASSEMBLE || mode == BUILD || mode == CREATE - || mode == GROW || mode == INCREMENTAL - || mode == MANAGE) + if (mode == ASSEMBLE || mode == BUILD || + mode == CREATE || mode == GROW || + mode == INCREMENTAL || mode == MANAGE) break; /* b means bitmap */ case Brief: c.brief = 1; @@ -282,8 +283,8 @@ int main(int argc, char *argv[]) } else { /* special case of -c --help */ if ((opt == 'c' || opt == ConfigFile) && - ( strncmp(optarg, "--h", 3)==0 || - strncmp(optarg, "-h", 2)==0)) { + (strncmp(optarg, "--h", 3) == 0 || + strncmp(optarg, "-h", 2) == 0)) { fputs(Help_config, stdout); exit(0); } @@ -295,6 +296,7 @@ int main(int argc, char *argv[]) dv->devname = optarg; dv->disposition = devmode; dv->writemostly = writemostly; + dv->failfast = failfast; dv->used = 0; dv->next = NULL; *devlistend = dv; @@ -351,6 +353,7 @@ int main(int argc, char *argv[]) dv->devname = optarg; dv->disposition = devmode; dv->writemostly = writemostly; + dv->failfast = failfast; dv->used = 0; dv->next = NULL; *devlistend = dv; @@ -409,12 +412,20 @@ int main(int argc, char *argv[]) case O(CREATE,'W'): case O(CREATE,WriteMostly): /* set write-mostly for following devices */ - writemostly = 1; + writemostly = FlagSet; continue; case O(MANAGE,'w'): /* clear write-mostly for following devices */ - writemostly = 2; + writemostly = FlagClear; + continue; + + case O(MANAGE,FailFast): + case O(CREATE,FailFast): + failfast = FlagSet; + continue; + case O(MANAGE,NoFailFast): + failfast = FlagClear; continue; case O(GROW,'z'): @@ -424,14 +435,12 @@ int main(int argc, char *argv[]) pr_err("size may only be specified once. Second value is %s.\n", optarg); exit(2); } - if (strcmp(optarg, "max")==0) + if (strcmp(optarg, "max") == 0) s.size = MAX_SIZE; else { s.size = parse_size(optarg); - if (s.size == INVALID_SECTORS || - s.size < 8) { - pr_err("invalid size: %s\n", - optarg); + if (s.size == INVALID_SECTORS || s.size < 8) { + pr_err("invalid size: %s\n", optarg); exit(2); } /* convert sectors to K */ @@ -463,8 +472,7 @@ int main(int argc, char *argv[]) pr_err("data-offset may only be specified one. Second value is %s.\n", optarg); exit(2); } - if (mode == CREATE && - strcmp(optarg, "variable") == 0) + if (mode == CREATE && strcmp(optarg, "variable") == 0) data_offset = VARIABLE_OFFSET; else data_offset = parse_size(optarg); @@ -488,9 +496,9 @@ int main(int argc, char *argv[]) optarg); exit(2); } - if (s.level != 0 && s.level != LEVEL_LINEAR && s.level != 1 && - s.level != LEVEL_MULTIPATH && s.level != LEVEL_FAULTY && - s.level != 10 && + if (s.level != 0 && s.level != LEVEL_LINEAR && + s.level != 1 && s.level != LEVEL_MULTIPATH && + s.level != LEVEL_FAULTY && s.level != 10 && mode == BUILD) { pr_err("Raid level %s not permitted with --build.\n", optarg); @@ -592,6 +600,7 @@ int main(int argc, char *argv[]) ident.raid_disks = s.raiddisks; continue; case O(ASSEMBLE, Nodes): + case O(GROW, Nodes): case O(CREATE, Nodes): c.nodes = parse_num(optarg); if (c.nodes <= 0) { @@ -702,7 +711,7 @@ int main(int argc, char *argv[]) pr_err("super-minor cannot be set twice. Second value: %s.\n", optarg); exit(2); } - if (strcmp(optarg, "dev")==0) + if (strcmp(optarg, "dev") == 0) ident.super_minor = -2; else { ident.super_minor = parse_num(optarg); @@ -731,27 +740,27 @@ int main(int argc, char *argv[]) exit(2); } c.update = optarg; - if (strcmp(c.update, "sparc2.2")==0) + if (strcmp(c.update, "sparc2.2") == 0) continue; if (strcmp(c.update, "super-minor") == 0) continue; - if (strcmp(c.update, "summaries")==0) + if (strcmp(c.update, "summaries") == 0) continue; - if (strcmp(c.update, "resync")==0) + if (strcmp(c.update, "resync") == 0) continue; - if (strcmp(c.update, "uuid")==0) + if (strcmp(c.update, "uuid") == 0) continue; - if (strcmp(c.update, "name")==0) + if (strcmp(c.update, "name") == 0) continue; - if (strcmp(c.update, "homehost")==0) + if (strcmp(c.update, "homehost") == 0) continue; - if (strcmp(c.update, "home-cluster")==0) + if (strcmp(c.update, "home-cluster") == 0) continue; - if (strcmp(c.update, "nodes")==0) + if (strcmp(c.update, "nodes") == 0) continue; - if (strcmp(c.update, "devicesize")==0) + if (strcmp(c.update, "devicesize") == 0) continue; - if (strcmp(c.update, "no-bitmap")==0) + if (strcmp(c.update, "no-bitmap") == 0) continue; if (strcmp(c.update, "bbl") == 0) continue; @@ -1031,7 +1040,8 @@ int main(int argc, char *argv[]) } } if (devmode && devmode != opt && - (devmode == 'E' || (opt == 'E' && devmode != 'Q'))) { + (devmode == 'E' || + (opt == 'E' && devmode != 'Q'))) { pr_err("--examine/-E cannot be given with "); if (devmode == 'E') { if (option_index >= 0) @@ -1085,7 +1095,7 @@ int main(int argc, char *argv[]) pr_err("bitmap file needed with -b in --assemble mode\n"); exit(2); } - if (strcmp(optarg, "internal")==0) { + if (strcmp(optarg, "internal") == 0) { pr_err("there is no need to specify --bitmap when assembling arrays with internal bitmaps\n"); continue; } @@ -1127,13 +1137,13 @@ int main(int argc, char *argv[]) case O(CREATE,Bitmap): /* here we create the bitmap */ case O(GROW,'b'): case O(GROW,Bitmap): - if (strcmp(optarg, "internal")== 0 || - strcmp(optarg, "none")== 0 || + if (strcmp(optarg, "internal") == 0 || + strcmp(optarg, "none") == 0 || strchr(optarg, '/') != NULL) { s.bitmap_file = optarg; continue; } - if (strcmp(optarg, "clustered")== 0) { + if (strcmp(optarg, "clustered") == 0) { s.bitmap_file = optarg; /* Set the default number of cluster nodes * to 4 if not already set by user @@ -1143,7 +1153,7 @@ int main(int argc, char *argv[]) continue; } /* probable typo */ - pr_err("bitmap file must contain a '/', or be 'internal', or 'none'\n" + pr_err("bitmap file must contain a '/', or be 'internal', or be 'clustered', or 'none'\n" " not '%s'\n", optarg); exit(2); @@ -1264,9 +1274,8 @@ int main(int argc, char *argv[]) * an md device. We check that here and open it. */ - if (mode == MANAGE || mode == BUILD || mode == CREATE - || mode == GROW - || (mode == ASSEMBLE && ! c.scan)) { + if (mode == MANAGE || mode == BUILD || mode == CREATE || + mode == GROW || (mode == ASSEMBLE && ! c.scan)) { if (devs_found < 1) { pr_err("an md device must be given in this mode\n"); exit(2); @@ -1316,13 +1325,14 @@ int main(int argc, char *argv[]) if (c.homehost == NULL && c.require_homehost) c.homehost = conf_get_homehost(&c.require_homehost); - if (c.homehost == NULL || strcasecmp(c.homehost, "<system>")==0) { + if (c.homehost == NULL || strcasecmp(c.homehost, "<system>") == 0) { if (gethostname(sys_hostname, sizeof(sys_hostname)) == 0) { sys_hostname[sizeof(sys_hostname)-1] = 0; c.homehost = sys_hostname; } } - if (c.homehost && (!c.homehost[0] || strcasecmp(c.homehost, "<none>") == 0)) { + if (c.homehost && + (!c.homehost[0] || strcasecmp(c.homehost, "<none>") == 0)) { c.homehost = NULL; c.require_homehost = 0; } @@ -1346,8 +1356,8 @@ int main(int argc, char *argv[]) exit(2); } - if ((mode == MISC && devmode == 'E') - || (mode == MONITOR && spare_sharing == 0)) + if ((mode == MISC && devmode == 'E') || + (mode == MONITOR && spare_sharing == 0)) /* Anyone may try this */; else if (geteuid() != 0) { pr_err("must be super-user to perform this action\n"); @@ -1378,7 +1388,8 @@ int main(int argc, char *argv[]) break; case ASSEMBLE: if (devs_found == 1 && ident.uuid_set == 0 && - ident.super_minor == UnSet && ident.name[0] == 0 && !c.scan ) { + ident.super_minor == UnSet && ident.name[0] == 0 && + !c.scan ) { /* Only a device has been given, so get details from config file */ struct mddev_ident *array_ident = conf_get_ident(devlist->devname); if (array_ident == NULL) { @@ -1446,7 +1457,7 @@ int main(int argc, char *argv[]) } if (s.bitmap_file) { - if (strcmp(s.bitmap_file, "internal")==0 || + if (strcmp(s.bitmap_file, "internal") == 0 || strcmp(s.bitmap_file, "clustered") == 0) { pr_err("'internal' and 'clustered' bitmaps not supported with --build\n"); rv |= 1; @@ -1460,7 +1471,8 @@ int main(int argc, char *argv[]) c.delay = DEFAULT_BITMAP_DELAY; if (c.nodes) { - if (!s.bitmap_file || strcmp(s.bitmap_file, "clustered") != 0) { + if (!s.bitmap_file || + strcmp(s.bitmap_file, "clustered") != 0) { pr_err("--nodes argument only compatible with --bitmap=clustered\n"); rv = 1; break; @@ -1509,7 +1521,8 @@ int main(int argc, char *argv[]) } else if (devlist == NULL) { if (devmode == 'S' && c.scan) rv = stop_scan(c.verbose); - else if ((devmode == 'D' || devmode == Waitclean) && c.scan) + else if ((devmode == 'D' || devmode == Waitclean) && + c.scan) rv = misc_scan(devmode, &c); else if (devmode == UdevRules) rv = Write_rules(udev_filename); @@ -1575,7 +1588,8 @@ int main(int argc, char *argv[]) } if (devs_found > 1 && s.raiddisks == 0 && s.level == UnSet) { /* must be '-a'. */ - if (s.size > 0 || s.chunk || s.layout_str != NULL || s.bitmap_file) { + if (s.size > 0 || s.chunk || + s.layout_str || s.bitmap_file) { pr_err("--add cannot be used with other geometry changes in --grow mode\n"); rv = 1; break; @@ -1588,7 +1602,7 @@ int main(int argc, char *argv[]) } } else if (s.bitmap_file) { if (s.size > 0 || s.raiddisks || s.chunk || - s.layout_str != NULL || devs_found > 1) { + s.layout_str || devs_found > 1) { pr_err("--bitmap changes cannot be used with other geometry changes in --grow mode\n"); rv = 1; break; @@ -1600,9 +1614,9 @@ int main(int argc, char *argv[]) rv = Grow_continue_command(devlist->devname, mdfd, c.backup_file, c.verbose); - else if (s.size > 0 || s.raiddisks || s.layout_str != NULL - || s.chunk != 0 || s.level != UnSet - || data_offset != INVALID_SECTORS) { + else if (s.size > 0 || s.raiddisks || s.layout_str || + s.chunk != 0 || s.level != UnSet || + data_offset != INVALID_SECTORS) { rv = Grow_reshape(devlist->devname, mdfd, devlist->next, data_offset, &c, &s); @@ -1718,11 +1732,11 @@ static int scan_assemble(struct supertype *ss, rv2 = Assemble(ss, NULL, ident, devlist, c); - if (rv2==0) { + if (rv2 == 0) { cnt++; acnt++; } - } while (rv2!=2); + } while (rv2 != 2); /* Incase there are stacked devices, we need to go around again */ } while (acnt); if (cnt == 0 && rv == 0) { @@ -1763,8 +1777,7 @@ static int misc_scan(char devmode, struct context *c) if (me && me->path && strcmp(me->path, "/unknown") != 0) name = me->path; - if (name == NULL || - stat(name, &stb) != 0) + if (name == NULL || stat(name, &stb) != 0) name = get_md_name(e->devnm); if (!name) { |