- Update for latest mdadm-4.1+ patches, this is required by jsc#SLE-10078 and jsc#SLE-9348. Mostly the purpose is for latest Intel IMSM raid support. The following patches also include previous patches with new re-ordered prefix numbers. - Makefile: install mdadm_env.sh to /usr/lib/mdadm (bsc#1111960) 0000-Makefile-install-mdadm_env.sh-to-usr-lib-mdadm.patch - Assemble: keep MD_DISK_FAILFAST and MD_DISK_WRITEMOSTLY flag (jsc#SLE-10078, jsc#SLE-9348) 0001-Assemble-keep-MD_DISK_FAILFAST-and-MD_DISK_WRITEMOST.patch - Document PART-POLICY lines (jsc#SLE-10078, jsc#SLE-9348) 0002-Document-PART-POLICY-lines.patc - policy: support devices with multiple paths. (jsc#SLE-10078, jsc#SLE-9348) 0003-policy-support-devices-with-multiple-paths.patch - mdcheck: add systemd unit files to run mdcheck. (bsc#1115407) 0004-mdcheck-add-systemd-unit-files-to-run-mdcheck.patch - Monitor: add system timer to run --oneshot periodically (bsc#1115407) 0005-Monitor-add-system-timer-to-run-oneshot-periodically.patch - imsm: update metadata correctly while raid10 double (jsc#SLE-10078, jsc#SLE-9348) 0006-imsm-update-metadata-correctly-while-raid10-double-d.patch - Assemble: mask FAILFAST and WRITEMOSTLY flags when finding (jsc#SLE-10078, jsc#SLE-9348) 0007-Assemble-mask-FAILFAST-and-WRITEMOSTLY-flags-when-fi.patch - Grow: avoid overflow in compute_backup_blocks() (jsc#SLE-10078, jsc#SLE-9348) 0008-Grow-avoid-overflow-in-compute_backup_blocks.patch - Grow: report correct new chunk size. (jsc#SLE-10078, jsc#SLE-9348) 0009-Grow-report-correct-new-chunk-size.patch OBS-URL: https://build.opensuse.org/request/show/781064 OBS-URL: https://build.opensuse.org/package/show/Base:System/mdadm?expand=0&rev=181
182 lines
5.5 KiB
Diff
182 lines
5.5 KiB
Diff
From b771faef931c798a4553db0a8c1366aff90079c6 Mon Sep 17 00:00:00 2001
|
|
From: Blazej Kucman <blazej.kucman@intel.com>
|
|
Date: Fri, 29 Nov 2019 15:21:08 +0100
|
|
Subject: [PATCH] imsm: return correct uuid for volume in detail
|
|
Git-commit: b771faef931c798a4553db0a8c1366aff90079c6
|
|
Patch-mainline: mdadm-4.1+
|
|
References: jsc#SLE-10078, jsc#SLE-9348
|
|
|
|
Fixes the side effect of the patch b6180160f ("imsm: save current_vol number")
|
|
- wrong UUID is printed in detail for each volume.
|
|
New parameter "subarray" is added to determine what info should be extracted
|
|
from metadata (subarray or container).
|
|
The parameter affects only IMSM metadata.
|
|
|
|
Signed-off-by: Blazej Kucman <blazej.kucman@intel.com>
|
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
|
Signed-off-by: Coly Li <colyli@suse.de>
|
|
|
|
---
|
|
Detail.c | 4 ++--
|
|
mdadm.h | 5 +++--
|
|
super-ddf.c | 5 +++--
|
|
super-intel.c | 20 ++++++++++++++++++--
|
|
super0.c | 4 ++--
|
|
super1.c | 4 ++--
|
|
6 files changed, 30 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/Detail.c b/Detail.c
|
|
index 3e61e37..24fa462 100644
|
|
--- a/Detail.c
|
|
+++ b/Detail.c
|
|
@@ -623,7 +623,7 @@ This is pretty boring
|
|
free_mdstat(ms);
|
|
|
|
if (st && st->sb)
|
|
- st->ss->detail_super(st, c->homehost);
|
|
+ st->ss->detail_super(st, c->homehost, subarray);
|
|
|
|
if (array.raid_disks == 0 && sra &&
|
|
sra->array.major_version == -1 &&
|
|
@@ -767,7 +767,7 @@ skip_devices_state:
|
|
if (spares && c->brief && array.raid_disks)
|
|
printf(" spares=%d", spares);
|
|
if (c->brief && st && st->sb)
|
|
- st->ss->brief_detail_super(st);
|
|
+ st->ss->brief_detail_super(st, subarray);
|
|
if (st)
|
|
st->ss->free_super(st);
|
|
|
|
diff --git a/mdadm.h b/mdadm.h
|
|
index c88ceab..91f1338 100644
|
|
--- a/mdadm.h
|
|
+++ b/mdadm.h
|
|
@@ -847,8 +847,9 @@ extern struct superswitch {
|
|
/* Used to report details of an active array.
|
|
* ->load_super was possibly given a 'component' string.
|
|
*/
|
|
- void (*detail_super)(struct supertype *st, char *homehost);
|
|
- void (*brief_detail_super)(struct supertype *st);
|
|
+ void (*detail_super)(struct supertype *st, char *homehost,
|
|
+ char *subarray);
|
|
+ void (*brief_detail_super)(struct supertype *st, char *subarray);
|
|
void (*export_detail_super)(struct supertype *st);
|
|
|
|
/* Optional: platform hardware / firmware details */
|
|
diff --git a/super-ddf.c b/super-ddf.c
|
|
index c095e8a..7802063 100644
|
|
--- a/super-ddf.c
|
|
+++ b/super-ddf.c
|
|
@@ -1730,7 +1730,8 @@ err:
|
|
return 1;
|
|
}
|
|
|
|
-static void detail_super_ddf(struct supertype *st, char *homehost)
|
|
+static void detail_super_ddf(struct supertype *st, char *homehost,
|
|
+ char *subarray)
|
|
{
|
|
struct ddf_super *sb = st->sb;
|
|
int cnt = be16_to_cpu(sb->virt->populated_vdes);
|
|
@@ -1787,7 +1788,7 @@ static void uuid_of_ddf_subarray(const struct ddf_super *ddf,
|
|
memcpy(uuid, sha, 4*4);
|
|
}
|
|
|
|
-static void brief_detail_super_ddf(struct supertype *st)
|
|
+static void brief_detail_super_ddf(struct supertype *st, char *subarray)
|
|
{
|
|
struct mdinfo info;
|
|
char nbuf[64];
|
|
diff --git a/super-intel.c b/super-intel.c
|
|
index a7fbed4..86dcb69 100644
|
|
--- a/super-intel.c
|
|
+++ b/super-intel.c
|
|
@@ -2183,23 +2183,39 @@ err:
|
|
return 1;
|
|
}
|
|
|
|
-static void detail_super_imsm(struct supertype *st, char *homehost)
|
|
+static void detail_super_imsm(struct supertype *st, char *homehost,
|
|
+ char *subarray)
|
|
{
|
|
struct mdinfo info;
|
|
char nbuf[64];
|
|
+ struct intel_super *super = st->sb;
|
|
+ int temp_vol = super->current_vol;
|
|
+
|
|
+ if (subarray)
|
|
+ super->current_vol = strtoul(subarray, NULL, 10);
|
|
|
|
getinfo_super_imsm(st, &info, NULL);
|
|
fname_from_uuid(st, &info, nbuf, ':');
|
|
printf("\n UUID : %s\n", nbuf + 5);
|
|
+
|
|
+ super->current_vol = temp_vol;
|
|
}
|
|
|
|
-static void brief_detail_super_imsm(struct supertype *st)
|
|
+static void brief_detail_super_imsm(struct supertype *st, char *subarray)
|
|
{
|
|
struct mdinfo info;
|
|
char nbuf[64];
|
|
+ struct intel_super *super = st->sb;
|
|
+ int temp_vol = super->current_vol;
|
|
+
|
|
+ if (subarray)
|
|
+ super->current_vol = strtoul(subarray, NULL, 10);
|
|
+
|
|
getinfo_super_imsm(st, &info, NULL);
|
|
fname_from_uuid(st, &info, nbuf, ':');
|
|
printf(" UUID=%s", nbuf + 5);
|
|
+
|
|
+ super->current_vol = temp_vol;
|
|
}
|
|
|
|
static int imsm_read_serial(int fd, char *devname, __u8 *serial);
|
|
diff --git a/super0.c b/super0.c
|
|
index 42989b9..6b7c0e3 100644
|
|
--- a/super0.c
|
|
+++ b/super0.c
|
|
@@ -348,7 +348,7 @@ err:
|
|
return 1;
|
|
}
|
|
|
|
-static void detail_super0(struct supertype *st, char *homehost)
|
|
+static void detail_super0(struct supertype *st, char *homehost, char *subarray)
|
|
{
|
|
mdp_super_t *sb = st->sb;
|
|
printf(" UUID : ");
|
|
@@ -368,7 +368,7 @@ static void detail_super0(struct supertype *st, char *homehost)
|
|
printf("\n Events : %d.%d\n\n", sb->events_hi, sb->events_lo);
|
|
}
|
|
|
|
-static void brief_detail_super0(struct supertype *st)
|
|
+static void brief_detail_super0(struct supertype *st, char *subarray)
|
|
{
|
|
mdp_super_t *sb = st->sb;
|
|
printf(" UUID=");
|
|
diff --git a/super1.c b/super1.c
|
|
index b85dc20..929466d 100644
|
|
--- a/super1.c
|
|
+++ b/super1.c
|
|
@@ -833,7 +833,7 @@ err:
|
|
return 1;
|
|
}
|
|
|
|
-static void detail_super1(struct supertype *st, char *homehost)
|
|
+static void detail_super1(struct supertype *st, char *homehost, char *subarray)
|
|
{
|
|
struct mdp_superblock_1 *sb = st->sb;
|
|
bitmap_super_t *bms = (bitmap_super_t*)(((char*)sb) + MAX_SB_SIZE);
|
|
@@ -857,7 +857,7 @@ static void detail_super1(struct supertype *st, char *homehost)
|
|
(unsigned long long)__le64_to_cpu(sb->events));
|
|
}
|
|
|
|
-static void brief_detail_super1(struct supertype *st)
|
|
+static void brief_detail_super1(struct supertype *st, char *subarray)
|
|
{
|
|
struct mdp_superblock_1 *sb = st->sb;
|
|
int i;
|
|
--
|
|
2.25.0
|
|
|