From 5787fa490612387a43c1897eb807b0c5612b5cd2 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Wed, 12 Feb 2003 00:17:26 +0000 Subject: mdadm-1.0.9 --- Monitor.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'Monitor.c') diff --git a/Monitor.c b/Monitor.c index fa0d708..d994dbe 100644 --- a/Monitor.c +++ b/Monitor.c @@ -182,6 +182,14 @@ int Monitor(mddev_dev_t devlist, close(fd); continue; } + if (array.level != 1 && array.level != 5 && array.level != -4) { + if (!st->err) + alert("DeviceDisappeared", dev, "Wrong-Level", + mailaddr, alert_cmd); + st->err = 1; + close(fd); + continue; + } if (st->devnum < 0) { struct stat stb; if (fstat(fd, &stb) == 0 && @@ -229,7 +237,7 @@ int Monitor(mddev_dev_t devlist, if (ioctl(fd, GET_DISK_INFO, &disc)>= 0) { newstate = disc.state; dv = map_dev(disc.major, disc.minor); - } else if (mse && i < strlen(mse->pattern)) + } else if (mse && mse->pattern && i < strlen(mse->pattern)) switch(mse->pattern[i]) { case 'U': newstate = 6 /* ACTIVE/SYNC */; break; case '_': newstate = 0; break; @@ -271,7 +279,11 @@ int Monitor(mddev_dev_t devlist, if (scan) { struct mdstat_ent *mse; for (mse=mdstat; mse; mse=mse->next) - if (mse->devnum > 0) { + if (mse->devnum >= 0 && + (strcmp(mse->level, "raid1")==0 || + strcmp(mse->level, "raid5")==0 || + strcmp(mse->level, "multipath")==0) + ) { struct state *st = malloc(sizeof *st); if (st == NULL) continue; -- cgit