]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
Userland side of kernel changes for fixing issues with dir2 ondisk differences
authorTim Shimmin <tes@sgi.com>
Wed, 18 Jun 2008 06:19:52 +0000 (06:19 +0000)
committerTim Shimmin <tes@sgi.com>
Wed, 18 Jun 2008 06:19:52 +0000 (06:19 +0000)
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.

doc/CHANGES
include/platform_defs.h.in
include/xfs_dir2_sf.h

index 48640ceafca400ab868e1a8017fd664bca7839f3..4d151f4574468b32a553b9c44d950120e317adcb 100644 (file)
@@ -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.
 
index 64dc9a9fa977a3c1a28d353e405ddccd7c695e2b..d2d96060f4442534fa19e2fb57319cc991ebfd56 100644 (file)
@@ -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__ */
index 42f015b70018de2c4cd0b244096baf75ec9f7411..5c4740f5e30fbee01ef5aeeab4978647d0301318 100644 (file)
@@ -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 */