summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Create.c5
-rw-r--r--Monitor.c11
-rw-r--r--tests/00raid42
3 files changed, 10 insertions, 8 deletions
diff --git a/Create.c b/Create.c
index 08972ae..3e6f1af 100644
--- a/Create.c
+++ b/Create.c
@@ -315,12 +315,13 @@ int Create(struct supertype *st, char *mddev, int mdfd,
}
}
- /* If this is raid5, we want to configure the last active slot
+ /* If this is raid4/5, we want to configure the last active slot
* as missing, so that a reconstruct happens (faster than re-parity)
* FIX: Can we do this for raid6 as well?
*/
if (assume_clean==0 && force == 0 && first_missing >= raiddisks) {
switch ( level ) {
+ case 4:
case 5:
insert_point = raiddisks-1;
sparedisks++;
@@ -345,7 +346,7 @@ int Create(struct supertype *st, char *mddev, int mdfd,
array.md_minor = minor(stb.st_rdev);
array.not_persistent = 0;
/*** FIX: Need to do something about RAID-6 here ***/
- if ( ( (level == 5) &&
+ if ( ( (level == 4 || level == 5) &&
(insert_point < raiddisks || first_missing < raiddisks) )
||
( level == 6 && missing_disks == 2)
diff --git a/Monitor.c b/Monitor.c
index 79a88a7..91f02a4 100644
--- a/Monitor.c
+++ b/Monitor.c
@@ -245,8 +245,10 @@ int Monitor(mddev_dev_t devlist,
close(fd);
continue;
}
- if (array.level != 1 && array.level != 5 && array.level != -4 &&
- array.level != 6 && array.level != 10) {
+ /* It's much easier to list what array levels can't
+ * have a device disappear than all of them that can
+ */
+ if (array.level == 0 || array.level == -1) {
if (!st->err)
alert("DeviceDisappeared", dev, "Wrong-Level",
mailaddr, mailfrom, alert_cmd, dosyslog);
@@ -401,9 +403,8 @@ int Monitor(mddev_dev_t devlist,
struct mdstat_ent *mse;
for (mse=mdstat; mse; mse=mse->next)
if (mse->devnum != MAXINT &&
- (strcmp(mse->level, "raid1")==0 ||
- strcmp(mse->level, "raid5")==0 ||
- strcmp(mse->level, "multipath")==0)
+ (strcmp(mse->level, "raid0")!=0 &&
+ strcmp(mse->level, "linear")!=0)
) {
struct state *st = malloc(sizeof *st);
mdu_array_info_t array;
diff --git a/tests/00raid4 b/tests/00raid4
index 3618aa9..ddb16b1 100644
--- a/tests/00raid4
+++ b/tests/00raid4
@@ -8,7 +8,7 @@ mdadm -S $md0
# now with version-1 superblock
mdadm -CR $md0 -e1 --level=raid4 -n4 $dev0 $dev1 $dev2 $dev3
-check resync; check raid[45]
+check recovery; check raid[45]
testdev $md0 3 $mdsize1 64
mdadm -S $md0