52a13dbb79
- Incremental: Remove redundant spare movement logic (jsc#SLE-13700, bsc#1180220) 0112-Incremental-Remove-redundant-spare-movement-logic.patch - Dump: get stat from a wrong metadata file when restoring metadata (jsc#SLE-13700) 0113-Dump-get-stat-from-a-wrong-metadata-file-when-restor.patch OBS-URL: https://build.opensuse.org/request/show/860474 OBS-URL: https://build.opensuse.org/package/show/Base:System/mdadm?expand=0&rev=193
83 lines
2.3 KiB
Diff
83 lines
2.3 KiB
Diff
From 007087d0898a045901e4e120296e6d9b845b20a6 Mon Sep 17 00:00:00 2001
|
|
From: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
|
|
Date: Wed, 9 Sep 2020 10:31:18 +0200
|
|
Subject: [PATCH 04/17] Monitor: stop notifing about containers.
|
|
Git-commit: 007087d0898a045901e4e120296e6d9b845b20a6
|
|
References: jsc#SLE-13700
|
|
|
|
Stop reporting any events from container but still track them,
|
|
it is important for spare migration.
|
|
Stop mdmonitor if no redundant array is presented in mdstat.
|
|
There is nothing to follow.
|
|
|
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
|
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
|
Signed-off-by: Coly Li <colyli@suse.de>
|
|
|
|
---
|
|
Monitor.c | 19 ++++++++++++++++---
|
|
1 file changed, 16 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/Monitor.c b/Monitor.c
|
|
index 80a3200..aed7a69 100644
|
|
--- a/Monitor.c
|
|
+++ b/Monitor.c
|
|
@@ -212,15 +212,24 @@ int Monitor(struct mddev_dev *devlist,
|
|
int new_found = 0;
|
|
struct state *st, **stp;
|
|
int anydegraded = 0;
|
|
+ int anyredundant = 0;
|
|
|
|
if (mdstat)
|
|
free_mdstat(mdstat);
|
|
mdstat = mdstat_read(oneshot ? 0 : 1, 0);
|
|
|
|
- for (st = statelist; st; st = st->next)
|
|
+ for (st = statelist; st; st = st->next) {
|
|
if (check_array(st, mdstat, c->test, &info,
|
|
increments, c->prefer))
|
|
anydegraded = 1;
|
|
+ /* for external arrays, metadata is filled for
|
|
+ * containers only
|
|
+ */
|
|
+ if (st->metadata && st->metadata->ss->external)
|
|
+ continue;
|
|
+ if (st->err == 0 && !anyredundant)
|
|
+ anyredundant = 1;
|
|
+ }
|
|
|
|
/* now check if there are any new devices found in mdstat */
|
|
if (c->scan)
|
|
@@ -236,6 +245,9 @@ int Monitor(struct mddev_dev *devlist,
|
|
if (!new_found) {
|
|
if (oneshot)
|
|
break;
|
|
+ else if (!anyredundant) {
|
|
+ break;
|
|
+ }
|
|
else {
|
|
mdstat_wait(c->delay);
|
|
mdstat_close();
|
|
@@ -542,7 +554,8 @@ static int check_array(struct state *st, struct mdstat_ent *mdstat,
|
|
st->err = 0;
|
|
st->percent = RESYNC_NONE;
|
|
new_array = 1;
|
|
- alert("NewArray", st->devname, NULL, ainfo);
|
|
+ if (!is_container)
|
|
+ alert("NewArray", st->devname, NULL, ainfo);
|
|
}
|
|
|
|
if (st->utime == array.utime && st->failed == sra->array.failed_disks &&
|
|
@@ -676,7 +689,7 @@ static int check_array(struct state *st, struct mdstat_ent *mdstat,
|
|
return retval;
|
|
|
|
disappeared:
|
|
- if (!st->err)
|
|
+ if (!st->err && !is_container)
|
|
alert("DeviceDisappeared", dev, NULL, ainfo);
|
|
st->err++;
|
|
goto out;
|
|
--
|
|
2.26.2
|
|
|