summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--managemon.c11
-rw-r--r--monitor.c2
2 files changed, 10 insertions, 3 deletions
diff --git a/managemon.c b/managemon.c
index a2816ce..67c5951 100644
--- a/managemon.c
+++ b/managemon.c
@@ -460,7 +460,11 @@ static void manage_member(struct mdstat_ent *mdstat,
if (mdstat->level) {
int level = map_name(pers, mdstat->level);
- if (a->info.array.level != level && level >= 0) {
+ if (level == 0 || level == LEVEL_LINEAR) {
+ a->container = NULL;
+ return;
+ }
+ else if (a->info.array.level != level && level > 0) {
struct active_array *newa = duplicate_aa(a);
if (newa) {
newa->info.array.level = level;
@@ -608,7 +612,10 @@ static void manage_new(struct mdstat_ent *mdstat,
char buf[40];
/* check if array is ready to be monitored */
- if (!mdstat->active)
+ if (!mdstat->active || !mdstat->level)
+ return;
+ if (strcmp(mdstat->level, "raid0") == 0 ||
+ strcmp(mdstat->level, "linear") == 0)
return;
mdi = sysfs_read(-1, mdstat->devnum,
diff --git a/monitor.c b/monitor.c
index 69026ca..4a34bc1 100644
--- a/monitor.c
+++ b/monitor.c
@@ -535,7 +535,7 @@ static int wait_and_act(struct supertype *container, int nowait)
/* once an array has been deactivated we want to
* ask the manager to discard it.
*/
- if (!a->container || (a->info.array.level == 0)) {
+ if (!a->container) {
if (discard_this) {
ap = &(*ap)->next;
continue;