dcavalca / rpms / mdadm

Forked from rpms/mdadm 3 years ago
Clone

Blame SOURCES/0107-Incremental-Remove-redundant-spare-movement-logic.patch

790dca
From 69068584f9ed68b8b2736287a1c9863e11b741d5 Mon Sep 17 00:00:00 2001
790dca
From: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
790dca
Date: Fri, 11 Dec 2020 12:28:38 +0100
790dca
Subject: [PATCH 107/108] Incremental: Remove redundant spare movement logic
790dca
790dca
If policy is set then mdmonitor is responsible for moving spares.
790dca
This logic is reduntant and potentialy dangerus, spare could be moved at
790dca
initrd stage depending on drives appearance order.
790dca
790dca
Remove it.
790dca
790dca
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
790dca
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
790dca
---
790dca
 Incremental.c | 62 -----------------------------------------------------------
790dca
 1 file changed, 62 deletions(-)
790dca
790dca
diff --git a/Incremental.c b/Incremental.c
790dca
index ad9ec1c..e849bdd 100644
790dca
--- a/Incremental.c
790dca
+++ b/Incremental.c
790dca
@@ -1460,12 +1460,6 @@ static int Incremental_container(struct supertype *st, char *devname,
790dca
 	int trustworthy;
790dca
 	struct mddev_ident *match;
790dca
 	int rv = 0;
790dca
-	struct domainlist *domains;
790dca
-	struct map_ent *smp;
790dca
-	int suuid[4];
790dca
-	int sfd;
790dca
-	int ra_blocked = 0;
790dca
-	int ra_all = 0;
790dca
 	int result = 0;
790dca
 
790dca
 	st->ss->getinfo_super(st, &info, NULL);
790dca
@@ -1509,12 +1503,10 @@ static int Incremental_container(struct supertype *st, char *devname,
790dca
 		struct map_ent *mp;
790dca
 		struct mddev_ident *match = NULL;
790dca
 
790dca
-		ra_all++;
790dca
 		/* do not activate arrays blocked by metadata handler */
790dca
 		if (ra->array.state & (1 << MD_SB_BLOCK_VOLUME)) {
790dca
 			pr_err("Cannot activate array %s in %s.\n",
790dca
 				ra->text_version, devname);
790dca
-			ra_blocked++;
790dca
 			continue;
790dca
 		}
790dca
 		mp = map_by_uuid(&map, ra->uuid);
790dca
@@ -1617,60 +1609,6 @@ static int Incremental_container(struct supertype *st, char *devname,
790dca
 		}
790dca
 		printf("\n");
790dca
 	}
790dca
-
790dca
-	/* don't move spares to container with volume being activated
790dca
-	   when all volumes are blocked */
790dca
-	if (ra_all == ra_blocked)
790dca
-		return 0;
790dca
-
790dca
-	/* Now move all suitable spares from spare container */
790dca
-	domains = domain_from_array(list, st->ss->name);
790dca
-	memcpy(suuid, uuid_zero, sizeof(int[4]));
790dca
-	if (domains &&
790dca
-	    (smp = map_by_uuid(&map, suuid)) != NULL &&
790dca
-	    (sfd = open(smp->path, O_RDONLY)) >= 0) {
790dca
-		/* spare container found */
790dca
-		struct supertype *sst =
790dca
-			super_imsm.match_metadata_desc("imsm");
790dca
-		struct mdinfo *sinfo;
790dca
-
790dca
-		if (!sst->ss->load_container(sst, sfd, NULL)) {
790dca
-			struct spare_criteria sc = {0, 0};
790dca
-
790dca
-			if (st->ss->get_spare_criteria)
790dca
-				st->ss->get_spare_criteria(st, &sc);
790dca
-
790dca
-			close(sfd);
790dca
-			sinfo = container_choose_spares(sst, &sc,
790dca
-							domains, NULL,
790dca
-							st->ss->name, 0);
790dca
-			sst->ss->free_super(sst);
790dca
-			if (sinfo){
790dca
-				int count = 0;
790dca
-				struct mdinfo *disks = sinfo->devs;
790dca
-				while (disks) {
790dca
-					/* move spare from spare
790dca
-					 * container to currently
790dca
-					 * assembled one
790dca
-					 */
790dca
-					if (move_spare(
790dca
-						    smp->path,
790dca
-						    devname,
790dca
-						    makedev(disks->disk.major,
790dca
-							    disks->disk.minor)))
790dca
-						count++;
790dca
-					disks = disks->next;
790dca
-				}
790dca
-				if (count)
790dca
-					pr_err("Added %d spare%s to %s\n",
790dca
-					       count, count>1?"s":"", devname);
790dca
-			}
790dca
-			sysfs_free(sinfo);
790dca
-		} else
790dca
-			close(sfd);
790dca
-	}
790dca
-	domain_free(domains);
790dca
-	map_free(map);
790dca
 	return 0;
790dca
 }
790dca
 
790dca
-- 
790dca
2.7.5
790dca