Blame SOURCES/0006-imsm-pass-already-existing-map-to-imsm_num_data_memb.patch

d922d5
From 9529d3436771d9f38884861683dee3b40ab9d180 Mon Sep 17 00:00:00 2001
d922d5
From: Mariusz Dabrowski <mariusz.dabrowski@intel.com>
d922d5
Date: Thu, 5 Apr 2018 13:38:37 +0200
d922d5
Subject: [RHEL7.5 PATCH 06/26] imsm: pass already existing map to
d922d5
 imsm_num_data_members
d922d5
d922d5
In almost every place where imsm_num_data_members is called there is
d922d5
already existing map so it can be used it to avoid mistake when specifying
d922d5
map for imsm_num_data_members.
d922d5
d922d5
Signed-off-by: Mariusz Dabrowski <mariusz.dabrowski@intel.com>
d922d5
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
d922d5
---
d922d5
 super-intel.c | 41 +++++++++++++++++++++--------------------
d922d5
 1 file changed, 21 insertions(+), 20 deletions(-)
d922d5
d922d5
diff --git a/super-intel.c b/super-intel.c
d922d5
index fe2a705..3fc3cf4 100644
d922d5
--- a/super-intel.c
d922d5
+++ b/super-intel.c
d922d5
@@ -2767,13 +2767,11 @@ static __u32 num_stripes_per_unit_rebuild(struct imsm_dev *dev)
d922d5
 		return num_stripes_per_unit_resync(dev);
d922d5
 }
d922d5
 
d922d5
-static __u8 imsm_num_data_members(struct imsm_dev *dev, int second_map)
d922d5
+static __u8 imsm_num_data_members(struct imsm_map *map)
d922d5
 {
d922d5
 	/* named 'imsm_' because raid0, raid1 and raid10
d922d5
 	 * counter-intuitively have the same number of data disks
d922d5
 	 */
d922d5
-	struct imsm_map *map = get_imsm_map(dev, second_map);
d922d5
-
d922d5
 	switch (get_imsm_raid_level(map)) {
d922d5
 	case 0:
d922d5
 		return map->num_members;
d922d5
@@ -2862,7 +2860,7 @@ static __u64 blocks_per_migr_unit(struct intel_super *super,
d922d5
 		 */
d922d5
 		stripes_per_unit = num_stripes_per_unit_resync(dev);
d922d5
 		migr_chunk = migr_strip_blocks_resync(dev);
d922d5
-		disks = imsm_num_data_members(dev, MAP_0);
d922d5
+		disks = imsm_num_data_members(map);
d922d5
 		blocks_per_unit = stripes_per_unit * migr_chunk * disks;
d922d5
 		stripe = __le16_to_cpu(map->blocks_per_strip) * disks;
d922d5
 		segment = blocks_per_unit / stripe;
d922d5
@@ -3381,7 +3379,7 @@ static void getinfo_super_imsm_volume(struct supertype *st, struct mdinfo *info,
d922d5
 				(unsigned long long)blocks_per_unit,
d922d5
 				info->reshape_progress);
d922d5
 
d922d5
-			used_disks = imsm_num_data_members(dev, MAP_1);
d922d5
+			used_disks = imsm_num_data_members(prev_map);
d922d5
 			if (used_disks > 0) {
d922d5
 				array_blocks = blocks_per_member(map) *
d922d5
 					used_disks;
d922d5
@@ -8140,9 +8138,9 @@ static void handle_missing(struct intel_super *super, struct imsm_dev *dev)
d922d5
 static unsigned long long imsm_set_array_size(struct imsm_dev *dev,
d922d5
 					      long long new_size)
d922d5
 {
d922d5
-	int used_disks = imsm_num_data_members(dev, MAP_0);
d922d5
 	unsigned long long array_blocks;
d922d5
-	struct imsm_map *map;
d922d5
+	struct imsm_map *map = get_imsm_map(dev, MAP_0);
d922d5
+	int used_disks = imsm_num_data_members(map);
d922d5
 
d922d5
 	if (used_disks == 0) {
d922d5
 		/* when problems occures
d922d5
@@ -8155,17 +8153,15 @@ static unsigned long long imsm_set_array_size(struct imsm_dev *dev,
d922d5
 
d922d5
 	/* set array size in metadata
d922d5
 	 */
d922d5
-	if (new_size <= 0) {
d922d5
+	if (new_size <= 0)
d922d5
 		/* OLCE size change is caused by added disks
d922d5
 		 */
d922d5
-		map = get_imsm_map(dev, MAP_0);
d922d5
 		array_blocks = blocks_per_member(map) * used_disks;
d922d5
-	} else {
d922d5
+	else
d922d5
 		/* Online Volume Size Change
d922d5
 		 * Using  available free space
d922d5
 		 */
d922d5
 		array_blocks = new_size;
d922d5
-	}
d922d5
 
d922d5
 	array_blocks = round_size_to_mb(array_blocks, used_disks);
d922d5
 	set_imsm_dev_size(dev, array_blocks);
d922d5
@@ -8274,7 +8270,7 @@ static int imsm_set_array_state(struct active_array *a, int consistent)
d922d5
 				int used_disks;
d922d5
 				struct mdinfo *mdi;
d922d5
 
d922d5
-				used_disks = imsm_num_data_members(dev, MAP_0);
d922d5
+				used_disks = imsm_num_data_members(map);
d922d5
 				if (used_disks > 0) {
d922d5
 					array_blocks =
d922d5
 						blocks_per_member(map) *
d922d5
@@ -9132,8 +9128,10 @@ static int apply_reshape_migration_update(struct imsm_update_reshape_migration *
d922d5
 			 */
d922d5
 			if (u->new_chunksize > 0) {
d922d5
 				unsigned long long num_data_stripes;
d922d5
+				struct imsm_map *dest_map =
d922d5
+					get_imsm_map(dev, MAP_0);
d922d5
 				int used_disks =
d922d5
-					imsm_num_data_members(dev, MAP_0);
d922d5
+					imsm_num_data_members(dest_map);
d922d5
 
d922d5
 				if (used_disks == 0)
d922d5
 					return ret_val;
d922d5
@@ -9210,7 +9208,7 @@ static int apply_size_change_update(struct imsm_update_size_change *u,
d922d5
 		if (id->index == (unsigned)u->subdev) {
d922d5
 			struct imsm_dev *dev = get_imsm_dev(super, u->subdev);
d922d5
 			struct imsm_map *map = get_imsm_map(dev, MAP_0);
d922d5
-			int used_disks = imsm_num_data_members(dev, MAP_0);
d922d5
+			int used_disks = imsm_num_data_members(map);
d922d5
 			unsigned long long blocks_per_member;
d922d5
 			unsigned long long num_data_stripes;
d922d5
 
d922d5
@@ -10589,7 +10587,7 @@ void init_migr_record_imsm(struct supertype *st, struct imsm_dev *dev,
d922d5
 		max(map_dest->blocks_per_strip, map_src->blocks_per_strip);
d922d5
 	migr_rec->dest_depth_per_unit *=
d922d5
 		max(map_dest->blocks_per_strip, map_src->blocks_per_strip);
d922d5
-	new_data_disks = imsm_num_data_members(dev, MAP_0);
d922d5
+	new_data_disks = imsm_num_data_members(map_dest);
d922d5
 	migr_rec->blocks_per_unit =
d922d5
 		__cpu_to_le32(migr_rec->dest_depth_per_unit * new_data_disks);
d922d5
 	migr_rec->dest_depth_per_unit =
d922d5
@@ -10657,7 +10655,7 @@ int save_backup_imsm(struct supertype *st,
d922d5
 	int dest_layout = 0;
d922d5
 	int dest_chunk;
d922d5
 	unsigned long long start;
d922d5
-	int data_disks = imsm_num_data_members(dev, MAP_0);
d922d5
+	int data_disks = imsm_num_data_members(map_dest);
d922d5
 
d922d5
 	targets = xmalloc(new_disks * sizeof(int));
d922d5
 
d922d5
@@ -11279,6 +11277,7 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st,
d922d5
 	int imsm_layout = -1;
d922d5
 	int data_disks;
d922d5
 	struct imsm_dev *dev;
d922d5
+	struct imsm_map *map;
d922d5
 	struct intel_super *super;
d922d5
 	unsigned long long current_size;
d922d5
 	unsigned long long free_size;
d922d5
@@ -11369,7 +11368,8 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st,
d922d5
 
d922d5
 	super = st->sb;
d922d5
 	dev = get_imsm_dev(super, super->current_vol);
d922d5
-	data_disks = imsm_num_data_members(dev , MAP_0);
d922d5
+	map = get_imsm_map(dev, MAP_0);
d922d5
+	data_disks = imsm_num_data_members(map);
d922d5
 	/* compute current size per disk member
d922d5
 	 */
d922d5
 	current_size = info.custom_array_size / data_disks;
d922d5
@@ -11838,7 +11838,7 @@ static int imsm_manage_reshape(
d922d5
 	struct intel_dev *dv;
d922d5
 	unsigned int sector_size = super->sector_size;
d922d5
 	struct imsm_dev *dev = NULL;
d922d5
-	struct imsm_map *map_src;
d922d5
+	struct imsm_map *map_src, *map_dest;
d922d5
 	int migr_vol_qan = 0;
d922d5
 	int ndata, odata; /* [bytes] */
d922d5
 	int chunk; /* [bytes] */
d922d5
@@ -11876,12 +11876,13 @@ static int imsm_manage_reshape(
d922d5
 		goto abort;
d922d5
 	}
d922d5
 
d922d5
+	map_dest = get_imsm_map(dev, MAP_0);
d922d5
 	map_src = get_imsm_map(dev, MAP_1);
d922d5
 	if (map_src == NULL)
d922d5
 		goto abort;
d922d5
 
d922d5
-	ndata = imsm_num_data_members(dev, MAP_0);
d922d5
-	odata = imsm_num_data_members(dev, MAP_1);
d922d5
+	ndata = imsm_num_data_members(map_dest);
d922d5
+	odata = imsm_num_data_members(map_src);
d922d5
 
d922d5
 	chunk = __le16_to_cpu(map_src->blocks_per_strip) * 512;
d922d5
 	old_data_stripe_length = odata * chunk;
d922d5
-- 
d922d5
2.7.4
d922d5