summaryrefslogtreecommitdiffstats
path: root/util.c
diff options
context:
space:
mode:
authorNigel Croxon <ncroxon@redhat.com>2019-09-24 17:39:24 +0200
committerJes Sorensen <jsorensen@fb.com>2019-09-30 21:14:44 +0200
commit2c2d9c48d2daf0d78d20494c3779c0f6dc4bfa75 (patch)
tree75a2f4bf5da8daa8391b58bd8fc70f4cbab5779b /util.c
parentmdadm: Introduce new array state 'broken' for raid0/linear (diff)
downloadmdadm-2c2d9c48d2daf0d78d20494c3779c0f6dc4bfa75.tar.xz
mdadm-2c2d9c48d2daf0d78d20494c3779c0f6dc4bfa75.zip
mdadm: force a uuid swap on big endian
The code path for metadata 0.90 calls a common routine fname_from_uuid that uses metadata 1.2. The code expects member swapuuid to be setup and usable. But it is only setup when using metadata 1.2. Since the metadata 0.90 did not create swapuuid and set it. The test (st->ss == &super1) ? 1 : st->ss->swapuuid fails. The swapuuid is set at compile time based on byte order. Any call based on metadata 0.90 and on big endian processors, the --export uuid will be incorrect. Signed-Off-by: Nigel Croxon <ncroxon@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
Diffstat (limited to 'util.c')
-rw-r--r--util.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/util.c b/util.c
index c26cf5f3..64dd409c 100644
--- a/util.c
+++ b/util.c
@@ -685,8 +685,12 @@ char *fname_from_uuid(struct supertype *st, struct mdinfo *info,
// 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
+#if __BYTE_ORDER == BIG_ENDIAN
+ return __fname_from_uuid(info->uuid, 1, buf, sep);
+#else
return __fname_from_uuid(info->uuid, (st->ss == &super1) ? 1 :
st->ss->swapuuid, buf, sep);
+#endif
}
int check_ext2(int fd, char *name)