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>
|
||||
|
||||
|
@ -48,6 +48,8 @@ Patch4: 0004-Grow-Move-update_tail-assign-to-Grow_reshape.patch
|
||||
Patch5: 0005-Add-understanding-output-section-in-man.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
|
||||
Patch8: 0008-Detail-remove-duplicated-code.patch
|
||||
Patch9: 0009-mdadm-Fix-native-detail-export.patch
|
||||
Patch1001: 1001-display-timeout-status.patch
|
||||
Patch1002: 1002-OnCalendar-format-fix-of-mdcheck_start-timer.patch
|
||||
Patch1003: 1003-mdadm-treat-the-Dell-softraid-array-as-local-array.patch
|
||||
|
Loading…
Reference in New Issue
Block a user