forked from pool/mdadm
39 lines
1.3 KiB
Diff
39 lines
1.3 KiB
Diff
|
From 76d0f1886fdef89891d617df7e7f3fde89a38e1a Mon Sep 17 00:00:00 2001
|
||
|
From: Jes Sorensen <Jes.Sorensen@redhat.com>
|
||
|
Date: Wed, 19 Mar 2014 14:26:02 +0100
|
||
|
Subject: [PATCH 3/6] Work around architectures having statfs.f_type defined as
|
||
|
long
|
||
|
|
||
|
Having RAMFS_MAGIC defined as 0x858458f6 causing problems when trying
|
||
|
to compare it directly against statfs.f_type being cast from long to
|
||
|
unsigned long.
|
||
|
|
||
|
This hack is extremly ugly, but it should at least do the right thing
|
||
|
for every situation.
|
||
|
|
||
|
Thanks to Arnd Bergmann for suggesting the fix.
|
||
|
|
||
|
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
|
||
|
Signed-off-by: NeilBrown <neilb@suse.de>
|
||
|
---
|
||
|
util.c | 6 +++++-
|
||
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||
|
|
||
|
--- mdadm-3.3.orig/util.c
|
||
|
+++ mdadm-3.3/util.c
|
||
|
@@ -1948,9 +1948,13 @@ int in_initrd(void)
|
||
|
{
|
||
|
/* This is based on similar function in systemd. */
|
||
|
struct statfs s;
|
||
|
+ /* statfs.f_type is signed long on s390x and MIPS, causing all
|
||
|
+ sorts of sign extension problems with RAMFS_MAGIC being
|
||
|
+ defined as 0x858458f6 */
|
||
|
return statfs("/", &s) >= 0 &&
|
||
|
((unsigned long)s.f_type == TMPFS_MAGIC ||
|
||
|
- (unsigned long)s.f_type == RAMFS_MAGIC);
|
||
|
+ ((unsigned long)s.f_type & 0xFFFFFFFFUL) ==
|
||
|
+ ((unsigned long)RAMFS_MAGIC & 0xFFFFFFFFUL));
|
||
|
}
|
||
|
|
||
|
void reopen_mddev(int mdfd)
|