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

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