Merging upstream version 4.2+20231026.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
bb079da599
commit
a701b01644
30 changed files with 956 additions and 423 deletions
73
mdadm.c
73
mdadm.c
|
@ -690,20 +690,14 @@ int main(int argc, char *argv[])
|
|||
case O(CREATE,'N'):
|
||||
case O(ASSEMBLE,'N'):
|
||||
case O(MISC,'N'):
|
||||
if (ident.name[0]) {
|
||||
pr_err("name cannot be set twice. Second value %s.\n", optarg);
|
||||
exit(2);
|
||||
}
|
||||
if (mode == MISC && !c.subarray) {
|
||||
pr_err("-N/--name only valid with --update-subarray in misc mode\n");
|
||||
exit(2);
|
||||
}
|
||||
if (strlen(optarg) > 32) {
|
||||
pr_err("name '%s' is too long, 32 chars max.\n",
|
||||
optarg);
|
||||
|
||||
if (ident_set_name(&ident, optarg) != MDADM_STATUS_SUCCESS)
|
||||
exit(2);
|
||||
}
|
||||
strcpy(ident.name, optarg);
|
||||
|
||||
continue;
|
||||
|
||||
case O(ASSEMBLE,'m'): /* super-minor for array */
|
||||
|
@ -1290,37 +1284,33 @@ int main(int argc, char *argv[])
|
|||
pr_err("an md device must be given in this mode\n");
|
||||
exit(2);
|
||||
}
|
||||
if (ident_set_devname(&ident, devlist->devname) != MDADM_STATUS_SUCCESS)
|
||||
exit(1);
|
||||
|
||||
if ((int)ident.super_minor == -2 && c.autof) {
|
||||
pr_err("--super-minor=dev is incompatible with --auto\n");
|
||||
exit(2);
|
||||
}
|
||||
if (mode == MANAGE || mode == GROW) {
|
||||
mdfd = open_mddev(devlist->devname, 1);
|
||||
mdfd = open_mddev(ident.devname, 1);
|
||||
if (mdfd < 0)
|
||||
exit(1);
|
||||
|
||||
ret = fstat(mdfd, &stb);
|
||||
if (ret) {
|
||||
pr_err("fstat failed on %s.\n", devlist->devname);
|
||||
pr_err("fstat failed on %s.\n", ident.devname);
|
||||
exit(1);
|
||||
}
|
||||
} else {
|
||||
char *bname = basename(devlist->devname);
|
||||
|
||||
if (strlen(bname) > MD_NAME_MAX) {
|
||||
pr_err("Name %s is too long.\n", devlist->devname);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ret = stat(devlist->devname, &stb);
|
||||
ret = stat(ident.devname, &stb);
|
||||
if (ident.super_minor == -2 && ret != 0) {
|
||||
pr_err("--super-minor=dev given, and listed device %s doesn't exist.\n",
|
||||
devlist->devname);
|
||||
ident.devname);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!ret && !stat_is_md_dev(&stb)) {
|
||||
pr_err("device %s exists but is not an md array.\n", devlist->devname);
|
||||
pr_err("device %s exists but is not an md array.\n", ident.devname);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
@ -1408,17 +1398,17 @@ int main(int argc, char *argv[])
|
|||
case MANAGE:
|
||||
/* readonly, add/remove, readwrite, runstop */
|
||||
if (c.readonly > 0)
|
||||
rv = Manage_ro(devlist->devname, mdfd, c.readonly);
|
||||
rv = Manage_ro(ident.devname, mdfd, c.readonly);
|
||||
if (!rv && devs_found > 1)
|
||||
rv = Manage_subdevs(devlist->devname, mdfd,
|
||||
rv = Manage_subdevs(ident.devname, mdfd,
|
||||
devlist->next, c.verbose,
|
||||
c.test, c.update, c.force);
|
||||
if (!rv && c.readonly < 0)
|
||||
rv = Manage_ro(devlist->devname, mdfd, c.readonly);
|
||||
rv = Manage_ro(ident.devname, mdfd, c.readonly);
|
||||
if (!rv && c.runstop > 0)
|
||||
rv = Manage_run(devlist->devname, mdfd, &c);
|
||||
rv = Manage_run(ident.devname, mdfd, &c);
|
||||
if (!rv && c.runstop < 0)
|
||||
rv = Manage_stop(devlist->devname, mdfd, c.verbose, 0);
|
||||
rv = Manage_stop(ident.devname, mdfd, c.verbose, 0);
|
||||
break;
|
||||
case ASSEMBLE:
|
||||
if (!c.scan && c.runstop == -1) {
|
||||
|
@ -1428,22 +1418,19 @@ int main(int argc, char *argv[])
|
|||
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);
|
||||
struct mddev_ident *array_ident = conf_get_ident(ident.devname);
|
||||
if (array_ident == NULL) {
|
||||
pr_err("%s not identified in config file.\n",
|
||||
devlist->devname);
|
||||
pr_err("%s not identified in config file.\n", ident.devname);
|
||||
rv |= 1;
|
||||
if (mdfd >= 0)
|
||||
close(mdfd);
|
||||
} else {
|
||||
if (array_ident->autof == 0)
|
||||
array_ident->autof = c.autof;
|
||||
rv |= Assemble(ss, devlist->devname, array_ident,
|
||||
NULL, &c);
|
||||
rv |= Assemble(ss, ident.devname, array_ident, NULL, &c);
|
||||
}
|
||||
} else if (!c.scan)
|
||||
rv = Assemble(ss, devlist->devname, &ident,
|
||||
devlist->next, &c);
|
||||
rv = Assemble(ss, ident.devname, &ident, devlist->next, &c);
|
||||
else if (devs_found > 0) {
|
||||
if (c.update && devs_found > 1) {
|
||||
pr_err("can only update a single array at a time\n");
|
||||
|
@ -1501,7 +1488,7 @@ int main(int argc, char *argv[])
|
|||
break;
|
||||
}
|
||||
}
|
||||
rv = Build(devlist->devname, devlist->next, &s, &c);
|
||||
rv = Build(&ident, devlist->next, &s, &c);
|
||||
break;
|
||||
case CREATE:
|
||||
if (c.delay == 0)
|
||||
|
@ -1538,9 +1525,7 @@ int main(int argc, char *argv[])
|
|||
break;
|
||||
}
|
||||
|
||||
rv = Create(ss, devlist->devname,
|
||||
ident.name, ident.uuid_set ? ident.uuid : NULL,
|
||||
devs_found - 1, devlist->next, &s, &c);
|
||||
rv = Create(ss, &ident, devs_found - 1, devlist->next, &s, &c);
|
||||
break;
|
||||
case MISC:
|
||||
if (devmode == 'E') {
|
||||
|
@ -1637,8 +1622,7 @@ int main(int argc, char *argv[])
|
|||
break;
|
||||
}
|
||||
for (dv = devlist->next; dv; dv = dv->next) {
|
||||
rv = Grow_Add_device(devlist->devname, mdfd,
|
||||
dv->devname);
|
||||
rv = Grow_Add_device(ident.devname, mdfd, dv->devname);
|
||||
if (rv)
|
||||
break;
|
||||
}
|
||||
|
@ -1651,18 +1635,15 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
if (c.delay == 0)
|
||||
c.delay = DEFAULT_BITMAP_DELAY;
|
||||
rv = Grow_addbitmap(devlist->devname, mdfd, &c, &s);
|
||||
rv = Grow_addbitmap(ident.devname, mdfd, &c, &s);
|
||||
} else if (grow_continue)
|
||||
rv = Grow_continue_command(devlist->devname,
|
||||
mdfd, c.backup_file,
|
||||
c.verbose);
|
||||
rv = Grow_continue_command(ident.devname, mdfd, c.backup_file, c.verbose);
|
||||
else if (s.size > 0 || s.raiddisks || s.layout_str ||
|
||||
s.chunk != 0 || s.level != UnSet ||
|
||||
s.data_offset != INVALID_SECTORS) {
|
||||
rv = Grow_reshape(devlist->devname, mdfd,
|
||||
devlist->next, &c, &s);
|
||||
rv = Grow_reshape(ident.devname, mdfd, devlist->next, &c, &s);
|
||||
} else if (s.consistency_policy != CONSISTENCY_POLICY_UNKNOWN) {
|
||||
rv = Grow_consistency_policy(devlist->devname, mdfd, &c, &s);
|
||||
rv = Grow_consistency_policy(ident.devname, mdfd, &c, &s);
|
||||
} else if (array_size == 0)
|
||||
pr_err("no changes to --grow\n");
|
||||
break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue