Accepting request 916947 from Base:System
- Remove Spare drives line from details for external metadata (bsc#1180661, bsc#1182642) 0118-Remove-Spare-drives-line-from-details-for-external-m.patch - Don't associate spares with other arrays during RAID Examine (bsc#1180661, bsc#1182642) 0119-Don-t-associate-spares-with-other-arrays-during-RAID.patch (forwarded request 915689 from colyli) OBS-URL: https://build.opensuse.org/request/show/916947 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/mdadm?expand=0&rev=129
This commit is contained in:
commit
516dc2a316
@ -0,0 +1,38 @@
|
|||||||
|
From 8d69bf147ec77447c5d45c17bed7dc017808cc44 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oleksandr Shchirskyi <oleksandr.shchirskyi@linux.intel.com>
|
||||||
|
Date: Fri, 18 Jun 2021 15:53:31 +0200
|
||||||
|
Subject: [PATCH] Remove Spare drives line from details for external metadata
|
||||||
|
Git-commit: 8d69bf147ec77447c5d45c17bed7dc017808cc44
|
||||||
|
Patch-mainline: mdadm-4.1+
|
||||||
|
References: bsc#1180661, bsc#1182642
|
||||||
|
|
||||||
|
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>
|
||||||
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||||
|
Acked-by: Coly Li <colyli@suse.de>
|
||||||
|
---
|
||||||
|
Detail.c | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/Detail.c b/Detail.c
|
||||||
|
index cd26fb0..ad56344 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.31.1
|
||||||
|
|
168
0119-Don-t-associate-spares-with-other-arrays-during-RAID.patch
Normal file
168
0119-Don-t-associate-spares-with-other-arrays-during-RAID.patch
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
From 601ffa784f03cea843b9b732e561ffea0b8c036f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oleksandr Shchirskyi <oleksandr.shchirskyi@linux.intel.com>
|
||||||
|
Date: Fri, 18 Jun 2021 15:53:32 +0200
|
||||||
|
Subject: [PATCH] Don't associate spares with other arrays during RAID Examine
|
||||||
|
Git-commit: 601ffa784f03cea843b9b732e561ffea0b8c036f
|
||||||
|
Patch-mainline: mdadm-4.1+
|
||||||
|
References: bsc#1180661, bsc#1182642
|
||||||
|
|
||||||
|
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>
|
||||||
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||||
|
Acked-by: Coly Li <colyli@suse.de>
|
||||||
|
---
|
||||||
|
Examine.c | 2 +-
|
||||||
|
super-intel.c | 74 +++++++++++++--------------------------------------
|
||||||
|
2 files changed, 20 insertions(+), 56 deletions(-)
|
||||||
|
|
||||||
|
Index: mdadm-4.1/Examine.c
|
||||||
|
===================================================================
|
||||||
|
--- mdadm-4.1.orig/Examine.c
|
||||||
|
+++ mdadm-4.1/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");
|
||||||
|
Index: mdadm-4.1/super-intel.c
|
||||||
|
===================================================================
|
||||||
|
--- mdadm-4.1.orig/super-intel.c
|
||||||
|
+++ mdadm-4.1/super-intel.c
|
||||||
|
@@ -2084,12 +2084,6 @@ static void brief_examine_super_imsm(str
|
||||||
|
/* 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, ':');
|
||||||
|
@@ -3835,12 +3829,9 @@ static void imsm_copy_dev(struct imsm_de
|
||||||
|
|
||||||
|
static int compare_super_imsm(struct supertype *st, struct supertype *tst)
|
||||||
|
{
|
||||||
|
- /*
|
||||||
|
- * 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;
|
||||||
|
@@ -3852,27 +3843,27 @@ static int compare_super_imsm(struct sup
|
||||||
|
}
|
||||||
|
/* 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) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"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) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"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
|
||||||
|
@@ -3884,7 +3875,7 @@ static int compare_super_imsm(struct sup
|
||||||
|
|
||||||
|
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;
|
||||||
|
@@ -3892,43 +3883,17 @@ static int compare_super_imsm(struct sup
|
||||||
|
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;
|
||||||
|
}
|
@ -1,3 +1,13 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Sep 2 05:17:18 UTC 2021 - Coly Li <colyli@suse.com>
|
||||||
|
|
||||||
|
- Remove Spare drives line from details for external metadata
|
||||||
|
(bsc#1180661, bsc#1182642)
|
||||||
|
0118-Remove-Spare-drives-line-from-details-for-external-m.patch
|
||||||
|
- Don't associate spares with other arrays during RAID Examine
|
||||||
|
(bsc#1180661, bsc#1182642)
|
||||||
|
0119-Don-t-associate-spares-with-other-arrays-during-RAID.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri May 14 14:40:40 UTC 2021 - Coly Li <colyli@suse.com>
|
Fri May 14 14:40:40 UTC 2021 - Coly Li <colyli@suse.com>
|
||||||
|
|
||||||
|
@ -154,6 +154,8 @@ Patch114: 0114-super1-fix-Floating-point-exception.patch
|
|||||||
Patch115: 0115-super1.c-avoid-useless-sync-when-bitmap-switches-fro.patch
|
Patch115: 0115-super1.c-avoid-useless-sync-when-bitmap-switches-fro.patch
|
||||||
Patch116: 0116-imsm-nvme-multipath-support.patch
|
Patch116: 0116-imsm-nvme-multipath-support.patch
|
||||||
Patch117: 0117-Grow-be-careful-of-corrupt-dev_roles-list.patch
|
Patch117: 0117-Grow-be-careful-of-corrupt-dev_roles-list.patch
|
||||||
|
Patch118: 0118-Remove-Spare-drives-line-from-details-for-external-m.patch
|
||||||
|
Patch119: 0119-Don-t-associate-spares-with-other-arrays-during-RAID.patch
|
||||||
Patch1001: 1001-display-timeout-status.patch
|
Patch1001: 1001-display-timeout-status.patch
|
||||||
Patch1002: 1002-OnCalendar-format-fix-of-mdcheck_start-timer.patch
|
Patch1002: 1002-OnCalendar-format-fix-of-mdcheck_start-timer.patch
|
||||||
Patch1003: 1003-mdadm-treat-the-Dell-softraid-array-as-local-array.patch
|
Patch1003: 1003-mdadm-treat-the-Dell-softraid-array-as-local-array.patch
|
||||||
@ -278,6 +280,8 @@ mdadm is a program that can be used to control Linux md devices.
|
|||||||
%patch115 -p1
|
%patch115 -p1
|
||||||
%patch116 -p1
|
%patch116 -p1
|
||||||
%patch117 -p1
|
%patch117 -p1
|
||||||
|
%patch118 -p1
|
||||||
|
%patch119 -p1
|
||||||
%patch1001 -p1
|
%patch1001 -p1
|
||||||
%patch1002 -p1
|
%patch1002 -p1
|
||||||
%patch1003 -p1
|
%patch1003 -p1
|
||||||
|
Loading…
Reference in New Issue
Block a user