Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package mdadm for openSUSE:Factory checked 
in at 2024-09-23 15:18:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mdadm (Old)
 and      /work/SRC/openSUSE:Factory/.mdadm.new.29891 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mdadm"

Mon Sep 23 15:18:43 2024 rev:150 rq:1202506 version:4.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/mdadm/mdadm.changes      2024-08-12 
12:29:52.075262025 +0200
+++ /work/SRC/openSUSE:Factory/.mdadm.new.29891/mdadm.changes   2024-09-23 
15:18:44.704791387 +0200
@@ -1,0 +2,8 @@
+Wed Sep 18 15:43:37 UTC 2024 - Coly Li <[email protected]>
+
+- 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
+
+-------------------------------------------------------------------

New:
----
  0008-Detail-remove-duplicated-code.patch
  0009-mdadm-Fix-native-detail-export.patch

BETA DEBUG BEGIN:
  New:- Detail: remove duplicated code (bsc#1226413) 
  0008-Detail-remove-duplicated-code.patch
- mdadm: Fix native --detail --export (bsc#1226413)
  New:- mdadm: Fix native --detail --export (bsc#1226413)
  0009-mdadm-Fix-native-detail-export.patch
BETA DEBUG END:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ mdadm.spec ++++++
--- /var/tmp/diff_new_pack.pSQgVr/_old  2024-09-23 15:18:45.804836988 +0200
+++ /var/tmp/diff_new_pack.pSQgVr/_new  2024-09-23 15:18:45.804836988 +0200
@@ -48,6 +48,8 @@
 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

++++++ 0008-Detail-remove-duplicated-code.patch ++++++
>From 60c19530dd7cc6b38a75695a0a3d004bbe60d430 Mon Sep 17 00:00:00 2001
From: Kinga Tanska <[email protected]>
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 <[email protected]>
Signed-off-by: Mariusz Tkaczyk <[email protected]>
Signed-off-by: Coly Li <[email protected]>
---
 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


++++++ 0009-mdadm-Fix-native-detail-export.patch ++++++
>From ba65d917d121dfb9876053e6f62dbd4ebf2e028c Mon Sep 17 00:00:00 2001
From: Mariusz Tkaczyk <[email protected]>
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 <[email protected]>
Signed-off-by: Coly Li <[email protected]>
---
 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

Reply via email to