diff options
author | Neil Brown <neilb@suse.de> | 2003-02-12 00:17:26 +0000 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2003-02-12 00:17:26 +0000 |
commit | 5787fa490612387a43c1897eb807b0c5612b5cd2 (patch) | |
tree | 7e126aef2e93da5052aa8c47128abb663e446e06 /Monitor.c | |
parent | bd526cee922b8e2b279f04ca067f729e9b0ee723 (diff) | |
download | mdadm-5787fa490612387a43c1897eb807b0c5612b5cd2.tar.gz mdadm-5787fa490612387a43c1897eb807b0c5612b5cd2.tar.xz mdadm-5787fa490612387a43c1897eb807b0c5612b5cd2.zip |
mdadm-1.0.9mdadm-1.0.9
Diffstat (limited to 'Monitor.c')
-rw-r--r-- | Monitor.c | 16 |
1 files changed, 14 insertions, 2 deletions
@@ -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; |