Add support for --add-spare
--add-spare is like --add, but a --re-add is never attempted. So it is equivalent to two separate commands: --zero-metadata --add Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
422da715d9
commit
f33a71f107
7
Manage.c
7
Manage.c
|
@ -783,7 +783,8 @@ int Manage_add(int fd, int tfd, struct mddev_dev *dv,
|
|||
break;
|
||||
}
|
||||
/* FIXME this is a bad test to be using */
|
||||
if (!tst->sb && dv->disposition != 'a') {
|
||||
if (!tst->sb && (dv->disposition != 'a'
|
||||
&& dv->disposition != 'S')) {
|
||||
/* we are re-adding a device to a
|
||||
* completely dead array - have to depend
|
||||
* on kernel to check
|
||||
|
@ -813,7 +814,7 @@ int Manage_add(int fd, int tfd, struct mddev_dev *dv,
|
|||
dev_st = dup_super(tst);
|
||||
dev_st->ss->load_super(dev_st, tfd, NULL);
|
||||
}
|
||||
if (dev_st && dev_st->sb) {
|
||||
if (dev_st && dev_st->sb && dv->disposition != 'S') {
|
||||
int rv = attempt_re_add(fd, tfd, dv,
|
||||
dev_st, tst,
|
||||
rdev,
|
||||
|
@ -1237,6 +1238,7 @@ int Manage_subdevs(char *devname, int fd,
|
|||
* 'a' - add the device
|
||||
* try HOT_ADD_DISK
|
||||
* If that fails EINVAL, try ADD_NEW_DISK
|
||||
* 'S' - add the device as a spare - don't try re-add
|
||||
* 'A' - re-add the device
|
||||
* 'r' - remove the device: HOT_REMOVE_DISK
|
||||
* device can be 'faulty' or 'detached' in which case all
|
||||
|
@ -1447,6 +1449,7 @@ int Manage_subdevs(char *devname, int fd,
|
|||
dv->devname, dv->disposition);
|
||||
goto abort;
|
||||
case 'a':
|
||||
case 'S': /* --add-spare */
|
||||
case 'A':
|
||||
case 'M': /* --re-add missing */
|
||||
case 'F': /* --re-add faulty */
|
||||
|
|
1
ReadMe.c
1
ReadMe.c
|
@ -153,6 +153,7 @@ struct option long_options[] = {
|
|||
|
||||
/* Management */
|
||||
{"add", 0, 0, Add},
|
||||
{"add-spare", 0, 0, AddSpare},
|
||||
{"remove", 0, 0, Remove},
|
||||
{"fail", 0, 0, Fail},
|
||||
{"set-faulty",0, 0, Fail},
|
||||
|
|
12
mdadm.8.in
12
mdadm.8.in
|
@ -214,7 +214,10 @@ to detect and assemble arrays \(em possibly in an
|
|||
|
||||
.P
|
||||
If a device is given before any options, or if the first option is
|
||||
and of
|
||||
.BR \-\-add ,
|
||||
.BR \-\-re\-add ,
|
||||
.BR \-\-add\-spare ,
|
||||
.BR \-\-fail ,
|
||||
.BR \-\-remove ,
|
||||
or
|
||||
|
@ -1297,6 +1300,15 @@ remove them and attempt to immediately re\-add them. This can be
|
|||
useful if you are certain that the reason for failure has been
|
||||
resolved.
|
||||
|
||||
.TP
|
||||
.B \-\-add\-spare
|
||||
Add a device as a spare. This is similar to
|
||||
.B \-\-add
|
||||
except that it does not attempt
|
||||
.B \-\-re\-add
|
||||
first. The device will be added as a spare even if it looks like it
|
||||
could be an recent member of the array.
|
||||
|
||||
.TP
|
||||
.BR \-r ", " \-\-remove
|
||||
remove listed devices. They must not be active. i.e. they should
|
||||
|
|
4
mdadm.c
4
mdadm.c
|
@ -187,6 +187,7 @@ int main(int argc, char *argv[])
|
|||
break;
|
||||
case 'a':
|
||||
case Add:
|
||||
case AddSpare:
|
||||
case 'r':
|
||||
case Remove:
|
||||
case Replace:
|
||||
|
@ -915,6 +916,9 @@ int main(int argc, char *argv[])
|
|||
case O(MANAGE,Add): /* add a drive */
|
||||
devmode = 'a';
|
||||
continue;
|
||||
case O(MANAGE,AddSpare): /* add drive - never re-add */
|
||||
devmode = 'S';
|
||||
continue;
|
||||
case O(MANAGE,ReAdd):
|
||||
devmode = 'A';
|
||||
continue;
|
||||
|
|
Loading…
Reference in New Issue