Blame SOURCES/0093-Monitor-stop-notifing-about-containers.patch

e95a18
From 007087d0898a045901e4e120296e6d9b845b20a6 Mon Sep 17 00:00:00 2001
e95a18
From: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
e95a18
Date: Wed, 9 Sep 2020 10:31:18 +0200
e95a18
Subject: [PATCH 093/108] Monitor: stop notifing about containers.
e95a18
e95a18
Stop reporting any events from container but still track them,
e95a18
it is important for spare migration.
e95a18
Stop mdmonitor if no redundant array is presented in mdstat.
e95a18
There is nothing to follow.
e95a18
e95a18
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
e95a18
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
e95a18
---
e95a18
 Monitor.c | 19 ++++++++++++++++---
e95a18
 1 file changed, 16 insertions(+), 3 deletions(-)
e95a18
e95a18
diff --git a/Monitor.c b/Monitor.c
e95a18
index 80a3200..aed7a69 100644
e95a18
--- a/Monitor.c
e95a18
+++ b/Monitor.c
e95a18
@@ -212,15 +212,24 @@ int Monitor(struct mddev_dev *devlist,
e95a18
 		int new_found = 0;
e95a18
 		struct state *st, **stp;
e95a18
 		int anydegraded = 0;
e95a18
+		int anyredundant = 0;
e95a18
 
e95a18
 		if (mdstat)
e95a18
 			free_mdstat(mdstat);
e95a18
 		mdstat = mdstat_read(oneshot ? 0 : 1, 0);
e95a18
 
e95a18
-		for (st = statelist; st; st = st->next)
e95a18
+		for (st = statelist; st; st = st->next) {
e95a18
 			if (check_array(st, mdstat, c->test, &info,
e95a18
 					increments, c->prefer))
e95a18
 				anydegraded = 1;
e95a18
+			/* for external arrays, metadata is filled for
e95a18
+			 * containers only
e95a18
+			 */
e95a18
+			if (st->metadata && st->metadata->ss->external)
e95a18
+				continue;
e95a18
+			if (st->err == 0 && !anyredundant)
e95a18
+				anyredundant = 1;
e95a18
+		}
e95a18
 
e95a18
 		/* now check if there are any new devices found in mdstat */
e95a18
 		if (c->scan)
e95a18
@@ -236,6 +245,9 @@ int Monitor(struct mddev_dev *devlist,
e95a18
 		if (!new_found) {
e95a18
 			if (oneshot)
e95a18
 				break;
e95a18
+			else if (!anyredundant) {
e95a18
+				break;
e95a18
+			}
e95a18
 			else {
e95a18
 				mdstat_wait(c->delay);
e95a18
 				mdstat_close();
e95a18
@@ -542,7 +554,8 @@ static int check_array(struct state *st, struct mdstat_ent *mdstat,
e95a18
 		st->err = 0;
e95a18
 		st->percent = RESYNC_NONE;
e95a18
 		new_array = 1;
e95a18
-		alert("NewArray", st->devname, NULL, ainfo);
e95a18
+		if (!is_container)
e95a18
+			alert("NewArray", st->devname, NULL, ainfo);
e95a18
 	}
e95a18
 
e95a18
 	if (st->utime == array.utime && st->failed == sra->array.failed_disks &&
e95a18
@@ -676,7 +689,7 @@ static int check_array(struct state *st, struct mdstat_ent *mdstat,
e95a18
 	return retval;
e95a18
 
e95a18
  disappeared:
e95a18
-	if (!st->err)
e95a18
+	if (!st->err && !is_container)
e95a18
 		alert("DeviceDisappeared", dev, NULL, ainfo);
e95a18
 	st->err++;
e95a18
 	goto out;
e95a18
-- 
e95a18
2.7.5
e95a18