dcavalca / rpms / mdadm

Forked from rpms/mdadm 3 years ago
Clone

Blame SOURCES/0037-mdadm-force-a-uuid-swap-on-big-endian.patch

2910d5
From 2c2d9c48d2daf0d78d20494c3779c0f6dc4bfa75 Mon Sep 17 00:00:00 2001
2910d5
From: Nigel Croxon <ncroxon@redhat.com>
2910d5
Date: Tue, 24 Sep 2019 11:39:24 -0400
2910d5
Subject: [RHEL7.8 PATCH V2 37/47] mdadm: force a uuid swap on big endian
2910d5
2910d5
The code path for metadata 0.90 calls a common routine
2910d5
fname_from_uuid that uses metadata 1.2. The code expects member
2910d5
swapuuid to be setup and usable. But it is only setup when using
2910d5
metadata 1.2. Since the metadata 0.90 did not create swapuuid
2910d5
and set it. The test (st->ss == &super1) ? 1 : st->ss->swapuuid
2910d5
fails. The swapuuid is set at compile time based on byte order.
2910d5
Any call based on metadata 0.90 and on big endian processors,
2910d5
the --export uuid will be incorrect.
2910d5
2910d5
Signed-Off-by: Nigel Croxon <ncroxon@redhat.com>
2910d5
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2910d5
---
2910d5
 util.c | 4 ++++
2910d5
 1 file changed, 4 insertions(+)
2910d5
2910d5
diff --git a/util.c b/util.c
2910d5
index c26cf5f..64dd409 100644
2910d5
--- a/util.c
2910d5
+++ b/util.c
2910d5
@@ -685,8 +685,12 @@ char *fname_from_uuid(struct supertype *st, struct mdinfo *info,
2910d5
 	// work, but can't have it set if we want this printout to match
2910d5
 	// all the other uuid printouts in super1.c, so we force swapuuid
2910d5
 	// to 1 to make our printout match the rest of super1
2910d5
+#if __BYTE_ORDER == BIG_ENDIAN
2910d5
+	return __fname_from_uuid(info->uuid, 1, buf, sep);
2910d5
+#else
2910d5
 	return __fname_from_uuid(info->uuid, (st->ss == &super1) ? 1 :
2910d5
 				 st->ss->swapuuid, buf, sep);
2910d5
+#endif
2910d5
 }
2910d5
 
2910d5
 int check_ext2(int fd, char *name)
2910d5
-- 
2910d5
2.7.5
2910d5