diff options
-rw-r--r-- | Create.c | 5 | ||||
-rw-r--r-- | Monitor.c | 11 | ||||
-rw-r--r-- | tests/00raid4 | 2 |
3 files changed, 10 insertions, 8 deletions
@@ -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) @@ -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 |