Accepting request 1202506 from Base:System
OBS-URL: https://build.opensuse.org/request/show/1202506 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/mdadm?expand=0&rev=150
This commit is contained in:
commit
d61034bb43
79
0008-Detail-remove-duplicated-code.patch
Normal file
79
0008-Detail-remove-duplicated-code.patch
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
From 60c19530dd7cc6b38a75695a0a3d004bbe60d430 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kinga Tanska <kinga.tanska@intel.com>
|
||||||
|
Date: Tue, 27 Feb 2024 03:36:14 +0100
|
||||||
|
Subject: [PATCH] Detail: remove duplicated code
|
||||||
|
Git-commit: 60c19530dd7cc6b38a75695a0a3d004bbe60d430
|
||||||
|
Patch-mainline: mdadm-4.3
|
||||||
|
References: bsc#1226413
|
||||||
|
|
||||||
|
Remove duplicated code from Detail(), where MD_UUID and MD_DEVNAME
|
||||||
|
are being set. Superblock is no longer required to print system
|
||||||
|
properties. Now it tries to obtain map in two ways.
|
||||||
|
|
||||||
|
Signed-off-by: Kinga Tanska <kinga.tanska@intel.com>
|
||||||
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Signed-off-by: Coly Li <colyli@suse.de>
|
||||||
|
---
|
||||||
|
Detail.c | 33 +++++++++++++--------------------
|
||||||
|
1 file changed, 13 insertions(+), 20 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Detail.c b/Detail.c
|
||||||
|
index aaa3dd6e..f23ec16f 100644
|
||||||
|
--- a/Detail.c
|
||||||
|
+++ b/Detail.c
|
||||||
|
@@ -226,6 +226,9 @@ int Detail(char *dev, struct context *c)
|
||||||
|
str = map_num(pers, array.level);
|
||||||
|
|
||||||
|
if (c->export) {
|
||||||
|
+ char nbuf[64];
|
||||||
|
+ struct map_ent *mp = NULL, *map = NULL;
|
||||||
|
+
|
||||||
|
if (array.raid_disks) {
|
||||||
|
if (str)
|
||||||
|
printf("MD_LEVEL=%s\n", str);
|
||||||
|
@@ -247,32 +250,22 @@ int Detail(char *dev, struct context *c)
|
||||||
|
array.minor_version);
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (st && st->sb && info) {
|
||||||
|
- char nbuf[64];
|
||||||
|
- struct map_ent *mp, *map = NULL;
|
||||||
|
-
|
||||||
|
- fname_from_uuid(st, info, nbuf, ':');
|
||||||
|
- printf("MD_UUID=%s\n", nbuf + 5);
|
||||||
|
+ if (info)
|
||||||
|
mp = map_by_uuid(&map, info->uuid);
|
||||||
|
+ if (!mp)
|
||||||
|
+ mp = map_by_devnm(&map, fd2devnm(fd));
|
||||||
|
|
||||||
|
- if (mp && mp->path && strncmp(mp->path, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0)
|
||||||
|
+ if (mp) {
|
||||||
|
+ __fname_from_uuid(mp->uuid, 0, nbuf, ':');
|
||||||
|
+ printf("MD_UUID=%s\n", nbuf + 5);
|
||||||
|
+ if (mp->path && strncmp(mp->path, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0)
|
||||||
|
printf("MD_DEVNAME=%s\n", mp->path + DEV_MD_DIR_LEN);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
+ map_free(map);
|
||||||
|
+ if (st && st->sb) {
|
||||||
|
if (st->ss->export_detail_super)
|
||||||
|
st->ss->export_detail_super(st);
|
||||||
|
- map_free(map);
|
||||||
|
- } else {
|
||||||
|
- struct map_ent *mp, *map = NULL;
|
||||||
|
- char nbuf[64];
|
||||||
|
- mp = map_by_devnm(&map, fd2devnm(fd));
|
||||||
|
- if (mp) {
|
||||||
|
- __fname_from_uuid(mp->uuid, 0, nbuf, ':');
|
||||||
|
- printf("MD_UUID=%s\n", nbuf+5);
|
||||||
|
- }
|
||||||
|
- if (mp && mp->path && strncmp(mp->path, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0)
|
||||||
|
- printf("MD_DEVNAME=%s\n", mp->path + DEV_MD_DIR_LEN);
|
||||||
|
-
|
||||||
|
- map_free(map);
|
||||||
|
}
|
||||||
|
if (!c->no_devices && sra) {
|
||||||
|
struct mdinfo *mdi;
|
||||||
|
--
|
||||||
|
2.46.0
|
||||||
|
|
251
0009-mdadm-Fix-native-detail-export.patch
Normal file
251
0009-mdadm-Fix-native-detail-export.patch
Normal file
@ -0,0 +1,251 @@
|
|||||||
|
From ba65d917d121dfb9876053e6f62dbd4ebf2e028c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Date: Mon, 18 Mar 2024 16:19:30 +0100
|
||||||
|
Subject: [PATCH] mdadm: Fix native --detail --export
|
||||||
|
Git-commit: ba65d917d121dfb9876053e6f62dbd4ebf2e028c
|
||||||
|
Patch-mainline: mdadm-4.3
|
||||||
|
References: bsc#1226413
|
||||||
|
|
||||||
|
Mentioned commit (see Fixes) causes that UUID is not swapped as expected
|
||||||
|
for native superblock. Fix this problem.
|
||||||
|
|
||||||
|
For detail, we should avoid superblock calls, we can have information
|
||||||
|
about supertype from map, use that.
|
||||||
|
|
||||||
|
Simplify fname_from_uuid() by removing dependencies to metadata
|
||||||
|
handler, it is not needed. Decision is taken at compile time, expect
|
||||||
|
super1 but this function is not used by super1. Add warning about that.
|
||||||
|
Remove separator, it is always ':'.
|
||||||
|
|
||||||
|
Fixes: 60c19530dd7c ("Detail: remove duplicated code")
|
||||||
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||||||
|
Signed-off-by: Coly Li <colyli@suse.de>
|
||||||
|
---
|
||||||
|
Detail.c | 26 +++++++++++++++++++++++++-
|
||||||
|
mdadm.h | 3 +--
|
||||||
|
super-ddf.c | 10 +++++-----
|
||||||
|
super-intel.c | 16 ++++++++--------
|
||||||
|
util.c | 24 +++++++++++++-----------
|
||||||
|
5 files changed, 52 insertions(+), 27 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Detail.c b/Detail.c
|
||||||
|
index f23ec16f..55a086d3 100644
|
||||||
|
--- a/Detail.c
|
||||||
|
+++ b/Detail.c
|
||||||
|
@@ -49,6 +49,30 @@ static int add_device(const char *dev, char ***p_devices,
|
||||||
|
return n_devices + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * detail_fname_from_uuid() - generate uuid string with special super1 handling.
|
||||||
|
+ * @mp: map entry to parse.
|
||||||
|
+ * @buf: buf to write.
|
||||||
|
+ *
|
||||||
|
+ * Hack to workaround an issue with super1 superblocks. It swapuuid set in order for assembly
|
||||||
|
+ * to work, but can't have it set if we want this printout to match all the other uuid printouts
|
||||||
|
+ * in super1.c, so we force swapuuid to 1 to make our printout match the rest of super1.
|
||||||
|
+ *
|
||||||
|
+ * Always convert uuid if host is big endian.
|
||||||
|
+ */
|
||||||
|
+char *detail_fname_from_uuid(struct map_ent *mp, char *buf)
|
||||||
|
+{
|
||||||
|
+#if __BYTE_ORDER == BIG_ENDIAN
|
||||||
|
+ bool swap = true;
|
||||||
|
+#else
|
||||||
|
+ bool swap = false;
|
||||||
|
+#endif
|
||||||
|
+ if (strncmp(mp->metadata, "1.", 2) == 0)
|
||||||
|
+ swap = true;
|
||||||
|
+
|
||||||
|
+ return __fname_from_uuid(mp->uuid, swap, buf, ':');
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int Detail(char *dev, struct context *c)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
@@ -256,7 +280,7 @@ int Detail(char *dev, struct context *c)
|
||||||
|
mp = map_by_devnm(&map, fd2devnm(fd));
|
||||||
|
|
||||||
|
if (mp) {
|
||||||
|
- __fname_from_uuid(mp->uuid, 0, nbuf, ':');
|
||||||
|
+ detail_fname_from_uuid(mp, nbuf);
|
||||||
|
printf("MD_UUID=%s\n", nbuf + 5);
|
||||||
|
if (mp->path && strncmp(mp->path, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0)
|
||||||
|
printf("MD_DEVNAME=%s\n", mp->path + DEV_MD_DIR_LEN);
|
||||||
|
diff --git a/mdadm.h b/mdadm.h
|
||||||
|
index 3fedca48..a363708a 100644
|
||||||
|
--- a/mdadm.h
|
||||||
|
+++ b/mdadm.h
|
||||||
|
@@ -1696,8 +1696,7 @@ extern const int uuid_zero[4];
|
||||||
|
extern int same_uuid(int a[4], int b[4], int swapuuid);
|
||||||
|
extern void copy_uuid(void *a, int b[4], int swapuuid);
|
||||||
|
extern char *__fname_from_uuid(int id[4], int swap, char *buf, char sep);
|
||||||
|
-extern char *fname_from_uuid(struct supertype *st,
|
||||||
|
- struct mdinfo *info, char *buf, char sep);
|
||||||
|
+extern char *fname_from_uuid(struct mdinfo *info, char *buf);
|
||||||
|
extern unsigned long calc_csum(void *super, int bytes);
|
||||||
|
extern int enough(int level, int raid_disks, int layout, int clean,
|
||||||
|
char *avail);
|
||||||
|
diff --git a/super-ddf.c b/super-ddf.c
|
||||||
|
index 94ac5ff3..21426c75 100644
|
||||||
|
--- a/super-ddf.c
|
||||||
|
+++ b/super-ddf.c
|
||||||
|
@@ -1617,7 +1617,7 @@ static void brief_examine_super_ddf(struct supertype *st, int verbose)
|
||||||
|
struct mdinfo info;
|
||||||
|
char nbuf[64];
|
||||||
|
getinfo_super_ddf(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
|
||||||
|
printf("ARRAY metadata=ddf UUID=%s\n", nbuf + 5);
|
||||||
|
}
|
||||||
|
@@ -1632,7 +1632,7 @@ static void brief_examine_subarrays_ddf(struct supertype *st, int verbose)
|
||||||
|
unsigned int i;
|
||||||
|
char nbuf[64];
|
||||||
|
getinfo_super_ddf(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
|
||||||
|
for (i = 0; i < be16_to_cpu(ddf->virt->max_vdes); i++) {
|
||||||
|
struct virtual_entry *ve = &ddf->virt->entries[i];
|
||||||
|
@@ -1645,7 +1645,7 @@ static void brief_examine_subarrays_ddf(struct supertype *st, int verbose)
|
||||||
|
ddf->currentconf =&vcl;
|
||||||
|
vcl.vcnum = i;
|
||||||
|
uuid_from_super_ddf(st, info.uuid);
|
||||||
|
- fname_from_uuid(st, &info, nbuf1, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf1);
|
||||||
|
_ddf_array_name(namebuf, ddf, i);
|
||||||
|
printf("ARRAY%s%s container=%s member=%d UUID=%s\n",
|
||||||
|
namebuf[0] == '\0' ? "" : " " DEV_MD_DIR, namebuf,
|
||||||
|
@@ -1658,7 +1658,7 @@ static void export_examine_super_ddf(struct supertype *st)
|
||||||
|
struct mdinfo info;
|
||||||
|
char nbuf[64];
|
||||||
|
getinfo_super_ddf(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
printf("MD_METADATA=ddf\n");
|
||||||
|
printf("MD_LEVEL=container\n");
|
||||||
|
printf("MD_UUID=%s\n", nbuf+5);
|
||||||
|
@@ -1798,7 +1798,7 @@ static void brief_detail_super_ddf(struct supertype *st, char *subarray)
|
||||||
|
return;
|
||||||
|
else
|
||||||
|
uuid_of_ddf_subarray(ddf, vcnum, info.uuid);
|
||||||
|
- fname_from_uuid(st, &info, nbuf,':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
printf(" UUID=%s", nbuf + 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/super-intel.c b/super-intel.c
|
||||||
|
index e1754f29..ff2590fe 100644
|
||||||
|
--- a/super-intel.c
|
||||||
|
+++ b/super-intel.c
|
||||||
|
@@ -2217,7 +2217,7 @@ static void examine_super_imsm(struct supertype *st, char *homehost)
|
||||||
|
else
|
||||||
|
printf("not supported\n");
|
||||||
|
getinfo_super_imsm(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
printf(" UUID : %s\n", nbuf + 5);
|
||||||
|
sum = __le32_to_cpu(mpb->check_sum);
|
||||||
|
printf(" Checksum : %08x %s\n", sum,
|
||||||
|
@@ -2242,7 +2242,7 @@ static void examine_super_imsm(struct supertype *st, char *homehost)
|
||||||
|
|
||||||
|
super->current_vol = i;
|
||||||
|
getinfo_super_imsm(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
print_imsm_dev(super, dev, nbuf + 5, super->disks->index);
|
||||||
|
}
|
||||||
|
for (i = 0; i < mpb->num_disks; i++) {
|
||||||
|
@@ -2267,7 +2267,7 @@ static void brief_examine_super_imsm(struct supertype *st, int verbose)
|
||||||
|
char nbuf[64];
|
||||||
|
|
||||||
|
getinfo_super_imsm(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
printf("ARRAY metadata=imsm UUID=%s\n", nbuf + 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2284,13 +2284,13 @@ static void brief_examine_subarrays_imsm(struct supertype *st, int verbose)
|
||||||
|
return;
|
||||||
|
|
||||||
|
getinfo_super_imsm(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
for (i = 0; i < super->anchor->num_raid_devs; i++) {
|
||||||
|
struct imsm_dev *dev = get_imsm_dev(super, i);
|
||||||
|
|
||||||
|
super->current_vol = i;
|
||||||
|
getinfo_super_imsm(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf1, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf1);
|
||||||
|
printf("ARRAY " DEV_MD_DIR "%.16s container=%s member=%d UUID=%s\n",
|
||||||
|
dev->volume, nbuf + 5, i, nbuf1 + 5);
|
||||||
|
}
|
||||||
|
@@ -2304,7 +2304,7 @@ static void export_examine_super_imsm(struct supertype *st)
|
||||||
|
char nbuf[64];
|
||||||
|
|
||||||
|
getinfo_super_imsm(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
printf("MD_METADATA=imsm\n");
|
||||||
|
printf("MD_LEVEL=container\n");
|
||||||
|
printf("MD_UUID=%s\n", nbuf+5);
|
||||||
|
@@ -2324,7 +2324,7 @@ static void detail_super_imsm(struct supertype *st, char *homehost,
|
||||||
|
super->current_vol = strtoul(subarray, NULL, 10);
|
||||||
|
|
||||||
|
getinfo_super_imsm(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
printf("\n UUID : %s\n", nbuf + 5);
|
||||||
|
|
||||||
|
super->current_vol = temp_vol;
|
||||||
|
@@ -2341,7 +2341,7 @@ static void brief_detail_super_imsm(struct supertype *st, char *subarray)
|
||||||
|
super->current_vol = strtoul(subarray, NULL, 10);
|
||||||
|
|
||||||
|
getinfo_super_imsm(st, &info, NULL);
|
||||||
|
- fname_from_uuid(st, &info, nbuf, ':');
|
||||||
|
+ fname_from_uuid(&info, nbuf);
|
||||||
|
printf(" UUID=%s", nbuf + 5);
|
||||||
|
|
||||||
|
super->current_vol = temp_vol;
|
||||||
|
diff --git a/util.c b/util.c
|
||||||
|
index 49a9c6e2..03336d6f 100644
|
||||||
|
--- a/util.c
|
||||||
|
+++ b/util.c
|
||||||
|
@@ -589,19 +589,21 @@ char *__fname_from_uuid(int id[4], int swap, char *buf, char sep)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-char *fname_from_uuid(struct supertype *st, struct mdinfo *info,
|
||||||
|
- char *buf, char sep)
|
||||||
|
-{
|
||||||
|
- // dirty hack to work around an issue with super1 superblocks...
|
||||||
|
- // super1 superblocks need swapuuid set in order for assembly to
|
||||||
|
- // work, but can't have it set if we want this printout to match
|
||||||
|
- // all the other uuid printouts in super1.c, so we force swapuuid
|
||||||
|
- // to 1 to make our printout match the rest of super1
|
||||||
|
+/**
|
||||||
|
+ * fname_from_uuid() - generate uuid string. Should not be used with super1.
|
||||||
|
+ * @info: info with uuid
|
||||||
|
+ * @buf: buf to fill.
|
||||||
|
+ *
|
||||||
|
+ * This routine should not be used with super1. See detail_fname_from_uuid() for details. It does
|
||||||
|
+ * not use superswitch swapuuid as it should be 0 but it has to do UUID conversion if host is big
|
||||||
|
+ * endian- left for backward compatibility.
|
||||||
|
+ */
|
||||||
|
+char *fname_from_uuid(struct mdinfo *info, char *buf)
|
||||||
|
+{
|
||||||
|
#if __BYTE_ORDER == BIG_ENDIAN
|
||||||
|
- return __fname_from_uuid(info->uuid, 1, buf, sep);
|
||||||
|
+ return __fname_from_uuid(info->uuid, true, buf, ':');
|
||||||
|
#else
|
||||||
|
- return __fname_from_uuid(info->uuid, (st->ss == &super1) ? 1 :
|
||||||
|
- st->ss->swapuuid, buf, sep);
|
||||||
|
+ return __fname_from_uuid(info->uuid, false, buf, ':');
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.46.0
|
||||||
|
|
@ -1,3 +1,11 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Sep 18 15:43:37 UTC 2024 - Coly Li <colyli@suse.de>
|
||||||
|
|
||||||
|
- Detail: remove duplicated code (bsc#1226413)
|
||||||
|
0008-Detail-remove-duplicated-code.patch
|
||||||
|
- mdadm: Fix native --detail --export (bsc#1226413)
|
||||||
|
0009-mdadm-Fix-native-detail-export.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sat Jul 6 15:43:04 UTC 2024 - Coly Li <colyli@suse.de>
|
Sat Jul 6 15:43:04 UTC 2024 - Coly Li <colyli@suse.de>
|
||||||
|
|
||||||
|
@ -48,6 +48,8 @@ Patch4: 0004-Grow-Move-update_tail-assign-to-Grow_reshape.patch
|
|||||||
Patch5: 0005-Add-understanding-output-section-in-man.patch
|
Patch5: 0005-Add-understanding-output-section-in-man.patch
|
||||||
Patch6: 0006-util.c-change-devnm-to-const-in-mdmon-functions.patch
|
Patch6: 0006-util.c-change-devnm-to-const-in-mdmon-functions.patch
|
||||||
Patch7: 0007-Wait-for-mdmon-when-it-is-stared-via-systemd.patch
|
Patch7: 0007-Wait-for-mdmon-when-it-is-stared-via-systemd.patch
|
||||||
|
Patch8: 0008-Detail-remove-duplicated-code.patch
|
||||||
|
Patch9: 0009-mdadm-Fix-native-detail-export.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
|
||||||
|
Loading…
Reference in New Issue
Block a user