diff options
-rw-r--r-- | fs/xfs/linux-2.6/xfs_linux.h | 7 | ||||
-rw-r--r-- | fs/xfs/xfs_dir2_sf.h | 6 |
2 files changed, 10 insertions, 3 deletions
diff --git a/fs/xfs/linux-2.6/xfs_linux.h b/fs/xfs/linux-2.6/xfs_linux.h index aded57321b12..4d45d9351a6c 100644 --- a/fs/xfs/linux-2.6/xfs_linux.h +++ b/fs/xfs/linux-2.6/xfs_linux.h | |||
@@ -300,4 +300,11 @@ static inline __uint64_t howmany_64(__uint64_t x, __uint32_t y) | |||
300 | return x; | 300 | return x; |
301 | } | 301 | } |
302 | 302 | ||
303 | /* ARM old ABI has some weird alignment/padding */ | ||
304 | #if defined(__arm__) && !defined(__ARM_EABI__) | ||
305 | #define __arch_pack __attribute__((packed)) | ||
306 | #else | ||
307 | #define __arch_pack | ||
308 | #endif | ||
309 | |||
303 | #endif /* __XFS_LINUX__ */ | 310 | #endif /* __XFS_LINUX__ */ |
diff --git a/fs/xfs/xfs_dir2_sf.h b/fs/xfs/xfs_dir2_sf.h index 005629d702d2..deecc9d238f8 100644 --- a/fs/xfs/xfs_dir2_sf.h +++ b/fs/xfs/xfs_dir2_sf.h | |||
@@ -62,7 +62,7 @@ typedef union { | |||
62 | * Normalized offset (in a data block) of the entry, really xfs_dir2_data_off_t. | 62 | * Normalized offset (in a data block) of the entry, really xfs_dir2_data_off_t. |
63 | * Only need 16 bits, this is the byte offset into the single block form. | 63 | * Only need 16 bits, this is the byte offset into the single block form. |
64 | */ | 64 | */ |
65 | typedef struct { __uint8_t i[2]; } xfs_dir2_sf_off_t; | 65 | typedef struct { __uint8_t i[2]; } __arch_pack xfs_dir2_sf_off_t; |
66 | 66 | ||
67 | /* | 67 | /* |
68 | * The parent directory has a dedicated field, and the self-pointer must | 68 | * The parent directory has a dedicated field, and the self-pointer must |
@@ -76,14 +76,14 @@ typedef struct xfs_dir2_sf_hdr { | |||
76 | __uint8_t count; /* count of entries */ | 76 | __uint8_t count; /* count of entries */ |
77 | __uint8_t i8count; /* count of 8-byte inode #s */ | 77 | __uint8_t i8count; /* count of 8-byte inode #s */ |
78 | xfs_dir2_inou_t parent; /* parent dir inode number */ | 78 | xfs_dir2_inou_t parent; /* parent dir inode number */ |
79 | } xfs_dir2_sf_hdr_t; | 79 | } __arch_pack xfs_dir2_sf_hdr_t; |
80 | 80 | ||
81 | typedef struct xfs_dir2_sf_entry { | 81 | typedef struct xfs_dir2_sf_entry { |
82 | __uint8_t namelen; /* actual name length */ | 82 | __uint8_t namelen; /* actual name length */ |
83 | xfs_dir2_sf_off_t offset; /* saved offset */ | 83 | xfs_dir2_sf_off_t offset; /* saved offset */ |
84 | __uint8_t name[1]; /* name, variable size */ | 84 | __uint8_t name[1]; /* name, variable size */ |
85 | xfs_dir2_inou_t inumber; /* inode number, var. offset */ | 85 | xfs_dir2_inou_t inumber; /* inode number, var. offset */ |
86 | } xfs_dir2_sf_entry_t; | 86 | } __arch_pack xfs_dir2_sf_entry_t; |
87 | 87 | ||
88 | typedef struct xfs_dir2_sf { | 88 | typedef struct xfs_dir2_sf { |
89 | xfs_dir2_sf_hdr_t hdr; /* shortform header */ | 89 | xfs_dir2_sf_hdr_t hdr; /* shortform header */ |