All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] imsm: correct offset for 4k disks in --examine output
@ 2021-06-18 13:53 Oleksandr Shchirskyi
  2021-06-18 13:53 ` [PATCH 2/3] Remove Spare drives line from details for external metadata Oleksandr Shchirskyi
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Oleksandr Shchirskyi @ 2021-06-18 13:53 UTC (permalink / raw)
  To: jes; +Cc: linux-raid, Oleksandr Shchirskyi

"Sector Offset" field in Examine output was always printed in 512
byte sectors. Update it to support 4096 sector size.

Signed-off-by: Oleksandr Shchirskyi <oleksandr.shchirskyi@linux.intel.com>
---
 super-intel.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/super-intel.c b/super-intel.c
index 54699129..caeb6db3 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -1663,7 +1663,7 @@ static void print_imsm_dev(struct intel_super *super,
 		   (unsigned long long)sz * 512 / super->sector_size,
 	       human_size(sz * 512));
 	printf("  Sector Offset : %llu\n",
-		pba_of_lba0(map));
+		pba_of_lba0(map) * 512 / super->sector_size);
 	printf("    Num Stripes : %llu\n",
 		num_data_stripes(map));
 	printf("     Chunk Size : %u KiB",
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/3] Remove Spare drives line from details for external metadata
  2021-06-18 13:53 [PATCH 1/3] imsm: correct offset for 4k disks in --examine output Oleksandr Shchirskyi
@ 2021-06-18 13:53 ` Oleksandr Shchirskyi
  2021-06-18 13:53 ` [PATCH 3/3] Don't associate spares with other arrays during RAID Examine Oleksandr Shchirskyi
  2021-07-16 14:26 ` [PATCH 1/3] imsm: correct offset for 4k disks in --examine output Jes Sorensen
  2 siblings, 0 replies; 4+ messages in thread
From: Oleksandr Shchirskyi @ 2021-06-18 13:53 UTC (permalink / raw)
  To: jes; +Cc: linux-raid, Oleksandr Shchirskyi

Arrays with external metadata do not have spare disks directly
assigned to volumes; spare disks belong to containers and are
moved to arrays when the array is degraded/reshaping.
Thus, the display of zero spare disks in volume details is
incorrect and can be confusing.

Signed-off-by: Oleksandr Shchirskyi <oleksandr.shchirskyi@linux.intel.com>
---
 Detail.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/Detail.c b/Detail.c
index cd26fb0f..ad56344f 100644
--- a/Detail.c
+++ b/Detail.c
@@ -548,7 +548,8 @@ int Detail(char *dev, struct context *c)
 			       array.working_disks);
 		if (array.raid_disks) {
 			printf("    Failed Devices : %d\n", array.failed_disks);
-			printf("     Spare Devices : %d\n", array.spare_disks);
+			if (!external)
+				printf("     Spare Devices : %d\n", array.spare_disks);
 		}
 		printf("\n");
 		if (array.level == 5) {
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 3/3] Don't associate spares with other arrays during RAID Examine
  2021-06-18 13:53 [PATCH 1/3] imsm: correct offset for 4k disks in --examine output Oleksandr Shchirskyi
  2021-06-18 13:53 ` [PATCH 2/3] Remove Spare drives line from details for external metadata Oleksandr Shchirskyi
@ 2021-06-18 13:53 ` Oleksandr Shchirskyi
  2021-07-16 14:26 ` [PATCH 1/3] imsm: correct offset for 4k disks in --examine output Jes Sorensen
  2 siblings, 0 replies; 4+ messages in thread
From: Oleksandr Shchirskyi @ 2021-06-18 13:53 UTC (permalink / raw)
  To: jes; +Cc: linux-raid, Oleksandr Shchirskyi

Spares in imsm belong to containers, not volumes, and must go into
a separate container when assembling the RAID.
Remove association spares with other arrays and make Examine print
separate containers for spares.
Auto assemble without config file already works like this. So make
creating a config file and assembling from it consistent with auto
assemble.
With this change, mdadm -Es will add this line to output if spares
are found:
ARRAY metadata=imsm UUID=00000000:00000000:00000000:00000000

Signed-off-by: Oleksandr Shchirskyi <oleksandr.shchirskyi@linux.intel.com>
---
 Examine.c     |  2 +-
 super-intel.c | 74 +++++++++++++--------------------------------------
 2 files changed, 20 insertions(+), 56 deletions(-)

diff --git a/Examine.c b/Examine.c
index 4381cd56..9574a3cc 100644
--- a/Examine.c
+++ b/Examine.c
@@ -166,7 +166,7 @@ int Examine(struct mddev_dev *devlist,
 			int newline = 0;
 
 			ap->st->ss->brief_examine_super(ap->st, c->verbose > 0);
-			if (ap->spares)
+			if (ap->spares && !ap->st->ss->external)
 				newline += printf("   spares=%d", ap->spares);
 			if (c->verbose > 0) {
 				newline += printf("   devices");
diff --git a/super-intel.c b/super-intel.c
index caeb6db3..d44e9f51 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -2123,12 +2123,6 @@ static void brief_examine_super_imsm(struct supertype *st, int verbose)
 	/* We just write a generic IMSM ARRAY entry */
 	struct mdinfo info;
 	char nbuf[64];
-	struct intel_super *super = st->sb;
-
-	if (!super->anchor->num_raid_devs) {
-		printf("ARRAY metadata=imsm\n");
-		return;
-	}
 
 	getinfo_super_imsm(st, &info, NULL);
 	fname_from_uuid(st, &info, nbuf, ':');
@@ -3913,12 +3907,9 @@ static void imsm_copy_dev(struct imsm_dev *dest, struct imsm_dev *src)
 static int compare_super_imsm(struct supertype *st, struct supertype *tst,
 			      int verbose)
 {
-	/*
-	 * return:
+	/*  return:
 	 *  0 same, or first was empty, and second was copied
-	 *  1 second had wrong number
-	 *  2 wrong uuid
-	 *  3 wrong other info
+	 *  1 sb are different
 	 */
 	struct intel_super *first = st->sb;
 	struct intel_super *sec = tst->sb;
@@ -3928,31 +3919,30 @@ static int compare_super_imsm(struct supertype *st, struct supertype *tst,
 		tst->sb = NULL;
 		return 0;
 	}
+
 	/* in platform dependent environment test if the disks
 	 * use the same Intel hba
-	 * If not on Intel hba at all, allow anything.
+	 * if not on Intel hba at all, allow anything.
+	 * doesn't check HBAs if num_raid_devs is not set, as it means
+	 * it is a free floating spare, and all spares regardless of HBA type
+	 * will fall into separate container during the assembly
 	 */
-	if (!check_env("IMSM_NO_PLATFORM") && first->hba && sec->hba) {
+	if (first->hba && sec->hba && first->anchor->num_raid_devs != 0) {
 		if (first->hba->type != sec->hba->type) {
 			if (verbose)
 				pr_err("HBAs of devices do not match %s != %s\n",
 				       get_sys_dev_type(first->hba->type),
 				       get_sys_dev_type(sec->hba->type));
-			return 3;
+			return 1;
 		}
-
 		if (first->orom != sec->orom) {
 			if (verbose)
 				pr_err("HBAs of devices do not match %s != %s\n",
 				       first->hba->pci_id, sec->hba->pci_id);
-			return 3;
+			return 1;
 		}
-
 	}
 
-	/* if an anchor does not have num_raid_devs set then it is a free
-	 * floating spare
-	 */
 	if (first->anchor->num_raid_devs > 0 &&
 	    sec->anchor->num_raid_devs > 0) {
 		/* Determine if these disks might ever have been
@@ -3964,7 +3954,7 @@ static int compare_super_imsm(struct supertype *st, struct supertype *tst,
 
 		if (memcmp(first->anchor->sig, sec->anchor->sig,
 			   MAX_SIGNATURE_LENGTH) != 0)
-			return 3;
+			return 1;
 
 		if (first_family == 0)
 			first_family = first->anchor->family_num;
@@ -3972,43 +3962,17 @@ static int compare_super_imsm(struct supertype *st, struct supertype *tst,
 			sec_family = sec->anchor->family_num;
 
 		if (first_family != sec_family)
-			return 3;
+			return 1;
 
 	}
 
-	/* if 'first' is a spare promote it to a populated mpb with sec's
-	 * family number
-	 */
-	if (first->anchor->num_raid_devs == 0 &&
-	    sec->anchor->num_raid_devs > 0) {
-		int i;
-		struct intel_dev *dv;
-		struct imsm_dev *dev;
-
-		/* we need to copy raid device info from sec if an allocation
-		 * fails here we don't associate the spare
-		 */
-		for (i = 0; i < sec->anchor->num_raid_devs; i++) {
-			dv = xmalloc(sizeof(*dv));
-			dev = xmalloc(sizeof_imsm_dev(get_imsm_dev(sec, i), 1));
-			dv->dev = dev;
-			dv->index = i;
-			dv->next = first->devlist;
-			first->devlist = dv;
-		}
-		if (i < sec->anchor->num_raid_devs) {
-			/* allocation failure */
-			free_devlist(first);
-			pr_err("imsm: failed to associate spare\n");
-			return 3;
-		}
-		first->anchor->num_raid_devs = sec->anchor->num_raid_devs;
-		first->anchor->orig_family_num = sec->anchor->orig_family_num;
-		first->anchor->family_num = sec->anchor->family_num;
-		memcpy(first->anchor->sig, sec->anchor->sig, MAX_SIGNATURE_LENGTH);
-		for (i = 0; i < sec->anchor->num_raid_devs; i++)
-			imsm_copy_dev(get_imsm_dev(first, i), get_imsm_dev(sec, i));
-	}
+	/* if an anchor does not have num_raid_devs set then it is a free
+	* floating spare. don't assosiate spare with any array, as during assembly
+	* spares shall fall into separate container, from which they can be moved
+	* when necessary
+	*/
+	if (first->anchor->num_raid_devs ^ sec->anchor->num_raid_devs)
+		return 1;
 
 	return 0;
 }
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/3] imsm: correct offset for 4k disks in --examine output
  2021-06-18 13:53 [PATCH 1/3] imsm: correct offset for 4k disks in --examine output Oleksandr Shchirskyi
  2021-06-18 13:53 ` [PATCH 2/3] Remove Spare drives line from details for external metadata Oleksandr Shchirskyi
  2021-06-18 13:53 ` [PATCH 3/3] Don't associate spares with other arrays during RAID Examine Oleksandr Shchirskyi
@ 2021-07-16 14:26 ` Jes Sorensen
  2 siblings, 0 replies; 4+ messages in thread
From: Jes Sorensen @ 2021-07-16 14:26 UTC (permalink / raw)
  To: Oleksandr Shchirskyi; +Cc: linux-raid

On 6/18/21 9:53 AM, Oleksandr Shchirskyi wrote:
> "Sector Offset" field in Examine output was always printed in 512
> byte sectors. Update it to support 4096 sector size.
> 
> Signed-off-by: Oleksandr Shchirskyi <oleksandr.shchirskyi@linux.intel.com>
> ---
>  super-intel.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Applied (3x)

Thanks,
Jes


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-07-16 14:41 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-18 13:53 [PATCH 1/3] imsm: correct offset for 4k disks in --examine output Oleksandr Shchirskyi
2021-06-18 13:53 ` [PATCH 2/3] Remove Spare drives line from details for external metadata Oleksandr Shchirskyi
2021-06-18 13:53 ` [PATCH 3/3] Don't associate spares with other arrays during RAID Examine Oleksandr Shchirskyi
2021-07-16 14:26 ` [PATCH 1/3] imsm: correct offset for 4k disks in --examine output Jes Sorensen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.