From: Tim Shimmin Date: Wed, 18 Jun 2008 06:19:52 +0000 (+0000) Subject: Userland side of kernel changes for fixing issues with dir2 ondisk differences X-Git-Tag: v3.0.0~67 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cfbb7abd1b72085486ed160439cf89903bedc3e1;p=thirdparty%2Fxfsprogs-dev.git Userland side of kernel changes for fixing issues with dir2 ondisk differences on old ARM ABI boxes. Merge of master-melb:xfs-cmds:31325a by kenmcd. Userland side of kernel changes for fixing issues with dir2 ondisk differences on old ARM ABI boxes. --- diff --git a/doc/CHANGES b/doc/CHANGES index 48640ceaf..4d151f457 100644 --- a/doc/CHANGES +++ b/doc/CHANGES @@ -1,3 +1,7 @@ +xfsprogs-2.10.1 + - Add ondisk dir2 sf support (by packing) for ARM old ABI. + - Courtesy of Eric Sandeen. + xfsprogs-2.10.0 (26 May 2008) - Add ASCII case-insensitive support to xfsprogs. diff --git a/include/platform_defs.h.in b/include/platform_defs.h.in index 64dc9a9fa..d2d96060f 100644 --- a/include/platform_defs.h.in +++ b/include/platform_defs.h.in @@ -147,4 +147,11 @@ typedef unsigned long long __psunsigned_t; | (minor&IRIX_DEV_MAXMIN))) #define IRIX_DEV_TO_KDEVT(dev) makedev(IRIX_DEV_MAJOR(dev),IRIX_DEV_MINOR(dev)) +/* ARM old ABI has some weird alignment/padding */ +#if defined(__arm__) && !defined(__ARM_EABI__) +#define __arch_pack __attribute__((packed)) +#else +#define __arch_pack +#endif + #endif /* __XFS_PLATFORM_DEFS_H__ */ diff --git a/include/xfs_dir2_sf.h b/include/xfs_dir2_sf.h index 42f015b70..5c4740f5e 100644 --- a/include/xfs_dir2_sf.h +++ b/include/xfs_dir2_sf.h @@ -62,7 +62,7 @@ typedef union { * Normalized offset (in a data block) of the entry, really xfs_dir2_data_off_t. * Only need 16 bits, this is the byte offset into the single block form. */ -typedef struct { __uint8_t i[2]; } xfs_dir2_sf_off_t; +typedef struct { __uint8_t i[2]; } __arch_pack xfs_dir2_sf_off_t; /* * The parent directory has a dedicated field, and the self-pointer must @@ -76,14 +76,14 @@ typedef struct xfs_dir2_sf_hdr { __uint8_t count; /* count of entries */ __uint8_t i8count; /* count of 8-byte inode #s */ xfs_dir2_inou_t parent; /* parent dir inode number */ -} xfs_dir2_sf_hdr_t; +} __arch_pack xfs_dir2_sf_hdr_t; typedef struct xfs_dir2_sf_entry { __uint8_t namelen; /* actual name length */ xfs_dir2_sf_off_t offset; /* saved offset */ __uint8_t name[1]; /* name, variable size */ xfs_dir2_inou_t inumber; /* inode number, var. offset */ -} xfs_dir2_sf_entry_t; +} __arch_pack xfs_dir2_sf_entry_t; typedef struct xfs_dir2_sf { xfs_dir2_sf_hdr_t hdr; /* shortform header */