summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKinga Tanska <kinga.tanska@intel.com>2022-12-27 06:50:43 +0100
committerJes Sorensen <jes@trained-monkey.org>2023-01-04 22:37:30 -0500
commit461fae7e7809670d286cc19aac5bfa861c29f93a (patch)
tree646b65f17002cdb037d2906a12060e51c3c5019c
parentb3e7b7eb1dfedd7cbd9a3800e884941f67d94c96 (diff)
downloadmdadm-461fae7e7809670d286cc19aac5bfa861c29f93a.tar.gz
incremental, manage: do not verify if remove is safe
Function is_remove_safe() was introduced to verify if removing member device won't cause failed state of the array. This verification should be used only with set-faulty command. Add special mode indicating that Incremental removal was executed. If this mode is used do not execute is_remove_safe() routine. Signed-off-by: Kinga Tanska <kinga.tanska@intel.com> Signed-off-by: Jes Sorensen <jes@trained-monkey.org>
-rw-r--r--Incremental.c2
-rw-r--r--Manage.c7
2 files changed, 5 insertions, 4 deletions
diff --git a/Incremental.c b/Incremental.c
index ff3548c..09b94b9 100644
--- a/Incremental.c
+++ b/Incremental.c
@@ -1744,7 +1744,7 @@ int IncrementalRemove(char *devname, char *id_path, int verbose)
memset(&devlist, 0, sizeof(devlist));
devlist.devname = devname;
- devlist.disposition = 'f';
+ devlist.disposition = 'I';
/* for a container, we must fail each member array */
if (ent->metadata_version &&
strncmp(ent->metadata_version, "external:", 9) == 0) {
diff --git a/Manage.c b/Manage.c
index 4d6e54b..6184d3f 100644
--- a/Manage.c
+++ b/Manage.c
@@ -1494,8 +1494,9 @@ int Manage_subdevs(char *devname, int fd,
/* Assume this is a kernel-internal name like 'sda1' */
int found = 0;
char dname[55];
- if (dv->disposition != 'r' && dv->disposition != 'f') {
- pr_err("%s only meaningful with -r or -f, not -%c\n",
+ if (dv->disposition != 'r' && dv->disposition != 'f' &&
+ dv->disposition != 'I') {
+ pr_err("%s only meaningful with -r, -f or -I, not -%c\n",
dv->devname, dv->disposition);
goto abort;
}
@@ -1647,7 +1648,7 @@ int Manage_subdevs(char *devname, int fd,
close(sysfd);
goto abort;
}
-
+ case 'I': /* incremental fail */
if ((sysfd >= 0 && write(sysfd, "faulty", 6) != 6) ||
(sysfd < 0 && ioctl(fd, SET_DISK_FAULTY,
rdev))) {