On Mon, 2005-08-01 at 16:41 -0400, Alex Deucher wrote:
> On 7/29/05, Dave Kleikamp <[EMAIL PROTECTED]> wrote:
> > I think there's something about sparc64 that jfs isn't handling
> > correctly. I've run a lot on ppc64, so I don't know what the difference
> > would be.
> >
>
> Just wondering if you had any ideas about this behavior. I'm willing
> to run any tests or try any patches. For reference it seems to be a
> sparc64 thing since we have the exact same set up on AMD64 and it
> works flawlessly (7 TB JFS volume).
I have a theory that jfs's use of 24-bit structures may be causing
alignment problems not seen on other architectures. I have made these
patches to both the kernel and utilities to get rid of bit-fields from
our structures. Can you give them a try? Even if it doesn't fix the
problem, I kind of like it from a cleanup point of view.
--
David Kleikamp
IBM Linux Technology Center
Get rid of bitfields. Reimplement 24-bit values as 3-character structures
diff -Nurp linux-2.6.13-rc4/fs/jfs/endian24.h linux/fs/jfs/endian24.h
--- linux-2.6.13-rc4/fs/jfs/endian24.h 2005-06-17 14:48:29.000000000 -0500
+++ linux/fs/jfs/endian24.h 1969-12-31 18:00:00.000000000 -0600
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) International Business Machines Corp., 2001
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-#ifndef _H_ENDIAN24
-#define _H_ENDIAN24
-
-/*
- * endian24.h:
- *
- * Endian conversion for 24-byte data
- *
- */
-#define __swab24(x) \
-({ \
- __u32 __x = (x); \
- ((__u32)( \
- ((__x & (__u32)0x000000ffUL) << 16) | \
- (__x & (__u32)0x0000ff00UL) | \
- ((__x & (__u32)0x00ff0000UL) >> 16) )); \
-})
-
-#if (defined(__KERNEL__) && defined(__LITTLE_ENDIAN)) || (defined(__BYTE_ORDER) && (__BYTE_ORDER == __LITTLE_ENDIAN))
- #define __cpu_to_le24(x) ((__u32)(x))
- #define __le24_to_cpu(x) ((__u32)(x))
-#else
- #define __cpu_to_le24(x) __swab24(x)
- #define __le24_to_cpu(x) __swab24(x)
-#endif
-
-#ifdef __KERNEL__
- #define cpu_to_le24 __cpu_to_le24
- #define le24_to_cpu __le24_to_cpu
-#endif
-
-#endif /* !_H_ENDIAN24 */
diff -Nurp linux-2.6.13-rc4/fs/jfs/jfs_extent.c linux/fs/jfs/jfs_extent.c
--- linux-2.6.13-rc4/fs/jfs/jfs_extent.c 2005-07-29 14:13:36.000000000 -0500
+++ linux/fs/jfs/jfs_extent.c 2005-08-02 08:22:56.000000000 -0500
@@ -386,8 +386,8 @@ int extHint(struct inode *ip, s64 offset
lxdl.maxnlxd = 1;
lxdl.nlxd = 1;
lxdl.lxd = &lxd;
- LXDoffset(&lxd, prev)
- LXDlength(&lxd, nbperpage);
+ lxd.offset = prev;
+ lxd.length = nbperpage;
xadl.maxnxad = 1;
xadl.nxad = 0;
diff -Nurp linux-2.6.13-rc4/fs/jfs/jfs_types.h linux/fs/jfs/jfs_types.h
--- linux-2.6.13-rc4/fs/jfs/jfs_types.h 2005-06-17 14:48:29.000000000 -0500
+++ linux/fs/jfs/jfs_types.h 2005-08-02 08:21:14.000000000 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (C) International Business Machines Corp., 2000-2004
+ * Copyright (C) International Business Machines Corp., 2000-2005
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -30,8 +30,6 @@
#include <linux/types.h>
#include <linux/nls.h>
-#include "endian24.h"
-
/*
* transaction and lock id's
*
@@ -65,43 +63,49 @@ typedef int boolean_t;
* logical xd (lxd)
*/
typedef struct {
- unsigned len:24;
- unsigned off1:8;
- u32 off2;
+ s64 offset;
+ int length;
} lxd_t;
-/* lxd_t field construction */
-#define LXDlength(lxd, length32) ( (lxd)->len = length32 )
-#define LXDoffset(lxd, offset64)\
-{\
- (lxd)->off1 = ((s64)offset64) >> 32;\
- (lxd)->off2 = (offset64) & 0xffffffff;\
-}
-
-/* lxd_t field extraction */
-#define lengthLXD(lxd) ( (lxd)->len )
-#define offsetLXD(lxd)\
- ( ((s64)((lxd)->off1)) << 32 | (lxd)->off2 )
-
/* lxd list */
struct lxdlist {
- s16 maxnlxd;
- s16 nlxd;
+ int maxnlxd;
+ int nlxd;
lxd_t *lxd;
};
+/* Little-endian 24-bit field */
+struct len24 {
+ unsigned char low;
+ unsigned char middle;
+ unsigned char high;
+};
+
+static inline void put_len24(struct len24 *len, int length)
+{
+ len->high = (length & 0x00ff0000) >> 16;
+ len->middle = (length & 0x0000ff00) >> 8;
+ len->low = length & 0x000000ff;
+}
+
+static inline int get_len24(struct len24 *len)
+{
+ return (len->high << 16) | (len->middle << 8) | len->low;
+}
+
/*
* physical xd (pxd)
*/
typedef struct {
- unsigned len:24;
- unsigned addr1:8;
+ struct len24 len;
+ unsigned char addr1;
__le32 addr2;
} pxd_t;
/* xd_t field construction */
-#define PXDlength(pxd, length32) ((pxd)->len = __cpu_to_le24(length32))
+#define PXDlength(pxd, length32) put_len24(&((pxd)->len), length32)
+
#define PXDaddress(pxd, address64)\
{\
(pxd)->addr1 = ((s64)address64) >> 32;\
@@ -109,7 +113,8 @@ typedef struct {
}
/* xd_t field extraction */
-#define lengthPXD(pxd) __le24_to_cpu((pxd)->len)
+#define lengthPXD(pxd) get_len24(&((pxd)->len))
+
#define addressPXD(pxd)\
( ((s64)((pxd)->addr1)) << 32 | __le32_to_cpu((pxd)->addr2))
@@ -126,11 +131,11 @@ struct pxdlist {
* data extent descriptor (dxd)
*/
typedef struct {
- unsigned flag:8; /* 1: flags */
- unsigned rsrvd:24;
+ unsigned char flag; /* 1: flags */
+ unsigned char rsrvd[3];
__le32 size; /* 4: size in byte */
- unsigned len:24; /* 3: length in unit of fsblksize */
- unsigned addr1:8; /* 1: address in unit of fsblksize */
+ struct len24 len; /* 3: length in unit of fsblksize */
+ unsigned char addr1; /* 1: address in unit of fsblksize */
__le32 addr2; /* 4: address in unit of fsblksize */
} dxd_t; /* - 16 - */
diff -Nurp linux-2.6.13-rc4/fs/jfs/jfs_xtree.c linux/fs/jfs/jfs_xtree.c
--- linux-2.6.13-rc4/fs/jfs/jfs_xtree.c 2005-07-29 14:13:36.000000000 -0500
+++ linux/fs/jfs/jfs_xtree.c 2005-08-02 08:24:37.000000000 -0500
@@ -266,8 +266,8 @@ int xtLookupList(struct inode *ip, struc
nlxd = lxdlist->nlxd;
lxd = lxdlist->lxd;
- lstart = offsetLXD(lxd);
- llen = lengthLXD(lxd);
+ lstart = lxd->offset;
+ llen = lxd->length;
lend = lstart + llen;
size = (ip->i_size + (JFS_SBI(ip->i_sb)->bsize - 1)) >>
@@ -337,8 +337,8 @@ int xtLookupList(struct inode *ip, struc
goto mapend;
lxd++;
- lstart = offsetLXD(lxd);
- llen = lengthLXD(lxd);
+ lstart = lxd->offset;
+ llen = lxd->length;
lend = lstart + llen;
if (lstart >= size)
goto mapend;
@@ -415,8 +415,8 @@ int xtLookupList(struct inode *ip, struc
goto mapend;
lxd++;
- lstart = offsetLXD(lxd);
- llen = lengthLXD(lxd);
+ lstart = lxd->offset;
+ llen = lxd->length;
lend = lstart + llen;
if (lstart >= size)
goto mapend;
diff -Nurp linux-2.6.13-rc4/fs/jfs/jfs_xtree.h linux/fs/jfs/jfs_xtree.h
--- linux-2.6.13-rc4/fs/jfs/jfs_xtree.h 2005-07-29 14:13:36.000000000 -0500
+++ linux/fs/jfs/jfs_xtree.h 2005-08-02 08:12:20.000000000 -0500
@@ -29,12 +29,12 @@
* extent allocation descriptor (xad)
*/
typedef struct xad {
- unsigned flag:8; /* 1: flag */
- unsigned rsvrd:16; /* 2: reserved */
- unsigned off1:8; /* 1: offset in unit of fsblksize */
+ unsigned char flag; /* 1: flag */
+ unsigned char rsvrd[2]; /* 2: reserved */
+ unsigned char off1; /* 1: offset in unit of fsblksize */
__le32 off2; /* 4: offset in unit of fsblksize */
- unsigned len:24; /* 3: length in unit of fsblksize */
- unsigned addr1:8; /* 1: address in unit of fsblksize */
+ struct len24 len; /* 3: length in unit of fsblksize */
+ unsigned char addr1; /* 1: address in unit of fsblksize */
__le32 addr2; /* 4: address in unit of fsblksize */
} xad_t; /* (16) */
@@ -54,14 +54,14 @@ typedef struct xad {
(xad)->addr1 = ((u64)address64) >> 32;\
(xad)->addr2 = __cpu_to_le32((address64) & 0xffffffff);\
}
-#define XADlength(xad, length32) (xad)->len = __cpu_to_le24(length32)
+#define XADlength(xad, length) put_len24(&((xad)->len), length)
/* xad_t field extraction */
#define offsetXAD(xad)\
( ((s64)((xad)->off1)) << 32 | __le32_to_cpu((xad)->off2))
#define addressXAD(xad)\
( ((s64)((xad)->addr1)) << 32 | __le32_to_cpu((xad)->addr2))
-#define lengthXAD(xad) __le24_to_cpu((xad)->len)
+#define lengthXAD(xad) get_len24(&((xad)->len))
/* xad list */
struct xadlist {
Get rid of bitfields. Reimplement 24-bit values as 3-character structures
Index: jfsutils/include/jfs_byteorder.h
===================================================================
RCS file: /cvsroot/jfs/jfsutils/include/jfs_byteorder.h,v
retrieving revision 1.3
diff -u -p -r1.3 jfs_byteorder.h
--- jfsutils/include/jfs_byteorder.h 25 Jan 2002 17:09:22 -0000 1.3
+++ jfsutils/include/jfs_byteorder.h 2 Aug 2005 14:25:34 -0000
@@ -36,15 +36,6 @@
(((uint16_t)(__x) & (uint16_t)0xff00U) >> 8) )); \
})
-#define __swab24(x) \
-({ \
- uint32_t __x = (x); \
- ((uint32_t)( \
- ((__x & (uint32_t)0x000000ffUL) << 16) | \
- (__x & (uint32_t)0x0000ff00UL) | \
- ((__x & (uint32_t)0x00ff0000UL) >> 16) )); \
-})
-
#define __swab32(x) \
({ \
uint32_t __x = (x); \
@@ -72,20 +63,16 @@
#if (BYTE_ORDER == LITTLE_ENDIAN)
#define __cpu_to_le16(x) ((uint16_t)(x))
- #define __cpu_to_le24(x) ((uint32_t)(x))
#define __cpu_to_le32(x) ((uint32_t)(x))
#define __cpu_to_le64(x) ((uint64_t)(x))
#define __le16_to_cpu(x) ((uint16_t)(x))
- #define __le24_to_cpu(x) ((uint32_t)(x))
#define __le32_to_cpu(x) ((uint32_t)(x))
#define __le64_to_cpu(x) ((uint64_t)(x))
#elif (BYTE_ORDER == BIG_ENDIAN)
#define __cpu_to_le16(x) __swab16(x)
- #define __cpu_to_le24(x) __swab24(x)
#define __cpu_to_le32(x) __swab32(x)
#define __cpu_to_le64(x) __swab64(x)
#define __le16_to_cpu(x) __swab16(x)
- #define __le24_to_cpu(x) __swab24(x)
#define __le32_to_cpu(x) __swab32(x)
#define __le64_to_cpu(x) __swab64(x)
#else
Index: jfsutils/include/jfs_types.h
===================================================================
RCS file: /cvsroot/jfs/jfsutils/include/jfs_types.h,v
retrieving revision 1.12
diff -u -p -r1.12 jfs_types.h
--- jfsutils/include/jfs_types.h 23 Sep 2002 21:07:42 -0000 1.12
+++ jfsutils/include/jfs_types.h 2 Aug 2005 14:25:35 -0000
@@ -78,18 +78,37 @@ struct timestruc_t {
#define HIGHORDER 0x80000000u /* high order bit on */
#define ONES 0xffffffffu /* all bit on */
+/* Little-endian 24-bit field */
+struct len24 {
+ unsigned char low;
+ unsigned char middle;
+ unsigned char high;
+};
+
+static inline void put_len24(struct len24 *len, int length)
+{
+ len->high = (length & 0x00ff0000) >> 16;
+ len->middle = (length & 0x0000ff00) >> 8;
+ len->low = length & 0x000000ff;
+}
+
+static inline int get_len24(struct len24 *len)
+{
+ return (len->high << 16) | (len->middle << 8) | len->low;
+}
+
/*
* physical xd (pxd)
*/
typedef struct {
- unsigned len:24;
- unsigned addr1:8;
+ struct len24 len;
+ unsigned char addr1;
uint32_t addr2;
} pxd_t;
/* xd_t field construction */
-#define PXDlength(pxd, length32) ((pxd)->len = __cpu_to_le24(length32))
+#define PXDlength(pxd, length32) put_len24(&((pxd)->len), length32)
#define PXDaddress(pxd, address64)\
{\
(pxd)->addr1 = ((int64_t)address64) >> 32;\
@@ -97,7 +116,7 @@ typedef struct {
}
/* xd_t field extraction */
-#define lengthPXD(pxd) __le24_to_cpu((pxd)->len)
+#define lengthPXD(pxd) get_len24(&((pxd)->len))
#define addressPXD(pxd)\
( ((int64_t)((pxd)->addr1)) << 32 | __le32_to_cpu((pxd)->addr2))
@@ -108,17 +127,16 @@ struct pxdlist {
pxd_t pxd[8];
};
-
/*
* data extent descriptor (dxd)
*/
typedef struct {
- unsigned flag:8; /* 1: flags */
- unsigned rsrvd:24; /* 3: */
- uint32_t size; /* 4: size in byte */
- unsigned len:24; /* 3: length in unit of fsblksize */
- unsigned addr1:8; /* 1: address in unit of fsblksize */
- uint32_t addr2; /* 4: address in unit of fsblksize */
+ unsigned char flag; /* 1: flags */
+ unsigned char rsrvd[3]; /* 3: */
+ uint32_t size; /* 4: size in byte */
+ struct len24 len; /* 3: length in unit of fsblksize */
+ unsigned char addr1; /* 1: address in unit of fsblksize */
+ uint32_t addr2; /* 4: address in unit of fsblksize */
} dxd_t; /* - 16 - */
/* dxd_t flags */
Index: jfsutils/include/jfs_xtree.h
===================================================================
RCS file: /cvsroot/jfs/jfsutils/include/jfs_xtree.h,v
retrieving revision 1.5
diff -u -p -r1.5 jfs_xtree.h
--- jfsutils/include/jfs_xtree.h 23 Sep 2002 21:07:42 -0000 1.5
+++ jfsutils/include/jfs_xtree.h 2 Aug 2005 14:25:35 -0000
@@ -28,12 +28,12 @@
* extent allocation descriptor (xad)
*/
typedef struct xad {
- unsigned flag:8; /* 1: flag */
- unsigned rsvrd:16; /* 2: reserved */
- unsigned off1:8; /* 1: offset in unit of fsblksize */
+ unsigned char flag; /* 1: flag */
+ unsigned char rsvrd[2]; /* 2: reserved */
+ unsigned char off1; /* 1: offset in unit of fsblksize */
uint32_t off2; /* 4: offset in unit of fsblksize */
- unsigned len:24; /* 3: length in unit of fsblksize */
- unsigned addr1:8; /* 1: address in unit of fsblksize */
+ struct len24 len; /* 3: length in unit of fsblksize */
+ unsigned char addr1; /* 1: address in unit of fsblksize */
uint32_t addr2; /* 4: address in unit of fsblksize */
} xad_t; /* (16) */
@@ -53,14 +53,14 @@ typedef struct xad {
(xad)->addr1 = ((uint64_t)address64) >> 32;\
(xad)->addr2 = __cpu_to_le32((address64) & 0xffffffff);\
}
-#define XADlength(xad, length32) (xad)->len = __cpu_to_le24(length32)
+#define XADlength(xad, length32) put_len24(&((xad)->len), length32)
/* xad_t field extraction */
#define offsetXAD(xad)\
( ((int64_t)((xad)->off1)) << 32 | __le32_to_cpu((xad)->off2))
#define addressXAD(xad)\
( ((int64_t)((xad)->addr1)) << 32 | __le32_to_cpu((xad)->addr2))
-#define lengthXAD(xad) __le24_to_cpu((xad)->len)
+#define lengthXAD(xad) get_len24(&((xad)->len))
/* xad_t flags */
#define XAD_NEW 0x01 /* new */
Index: jfsutils/mkfs/inodes.c
===================================================================
RCS file: /cvsroot/jfs/jfsutils/mkfs/inodes.c,v
retrieving revision 1.11
diff -u -p -r1.11 inodes.c
--- jfsutils/mkfs/inodes.c 16 Mar 2005 17:26:19 -0000 1.11
+++ jfsutils/mkfs/inodes.c 2 Aug 2005 14:25:35 -0000
@@ -447,21 +447,12 @@ void init_inode(struct dinode *new_inode
case max_extent_data:
((xtpage_t *) & (new_inode->di_DASD))->header.flag =
DXD_INDEX | BT_ROOT | BT_LEAF;
- /*
- * Since this is the root, we don't actually use the next and
- * prev entries. Set to 0 in case we decide to use this space
- * for something in the future.
- */
- ((xtpage_t *) & (new_inode->di_DASD))->header.next = 0;
- ((xtpage_t *) & (new_inode->di_DASD))->header.prev = 0;
((xtpage_t *) & (new_inode->di_DASD))->header.nextindex =
XTENTRYSTART + 1;
((xtpage_t *) & (new_inode->di_DASD))->header.maxentry =
XTROOTMAXSLOT;
((xtpage_t *) & (new_inode->di_DASD))->xad[XTENTRYSTART].flag =
0;
- ((xtpage_t *) & (new_inode->di_DASD))->xad[XTENTRYSTART].rsvrd =
- 0;
XADoffset(&((xtpage_t *) & (new_inode->di_DASD))->
xad[XTENTRYSTART], 0);
XADlength(&((xtpage_t *) & (new_inode->di_DASD))->
@@ -475,21 +466,12 @@ void init_inode(struct dinode *new_inode
*/
((xtpage_t *) & (new_inode->di_DASD))->header.flag =
DXD_INDEX | BT_ROOT | BT_LEAF;
- /*
- * Since this is the root, we don't actually use the next and
- * prev entries. Set to 0 in case we decide to use this space
- * for something in the future.
- */
- ((xtpage_t *) & (new_inode->di_DASD))->header.next = 0;
- ((xtpage_t *) & (new_inode->di_DASD))->header.prev = 0;
((xtpage_t *) & (new_inode->di_DASD))->header.nextindex =
XTENTRYSTART;
((xtpage_t *) & (new_inode->di_DASD))->header.maxentry =
XTROOTMAXSLOT;
((xtpage_t *) & (new_inode->di_DASD))->xad[XTENTRYSTART].flag =
0;
- ((xtpage_t *) & (new_inode->di_DASD))->xad[XTENTRYSTART].rsvrd =
- 0;
break;
default:
DBG_ERROR(("Internal error: %s(%d): Unrecognized inode data type %d\n",
Index: jfsutils/xpeek/directory.c
===================================================================
RCS file: /cvsroot/jfs/jfsutils/xpeek/directory.c,v
retrieving revision 1.14
diff -u -p -r1.14 directory.c
--- jfsutils/xpeek/directory.c 22 Jul 2004 14:25:08 -0000 1.14
+++ jfsutils/xpeek/directory.c 2 Aug 2005 14:25:35 -0000
@@ -481,7 +481,8 @@ void xtree()
xtree->header.maxentry = strtoul(token, 0, 0);
break;
case 4:
- xtree->header.self.len = strtoul(token, 0, 0);
+ PXDlength(&xtree->header.self,
+ strtoul(token, 0, 0));
break;
case 5:
xtree->header.self.addr1 = strtoul(token, 0, 0);
@@ -561,7 +562,7 @@ void display_xtpage(xtpage_t * xtree)
printf("[5] self.addr1\t0x%02x\n", xtree->header.self.addr1);
printf("[3] maxentry\t%d\t\t", xtree->header.maxentry);
printf("[6] self.addr2\t0x%08x\n", xtree->header.self.addr2);
- printf("[4] self.len\t0x%06x\t", xtree->header.self.len);
+ printf("[4] self.len\t0x%06x\t", lengthPXD(&xtree->header.self));
printf(" self.addr\t%lld\n", (long long) addressPXD(&xtree->header.self));
} /* end display_xtpage */
@@ -680,7 +681,7 @@ char display_internal_slots(struct dtslo
node_address = addressPXD(&(entry->xd));
printf("stbl[%d] = %d\n", i, slot_number);
- printf("[1] xd.len\t 0x%06x\t\t", entry->xd.len);
+ printf("[1] xd.len\t 0x%06x\t\t", lengthPXD(&entry->xd));
printf("[4] next\t%d\n", entry->next);
printf("[2] xd.addr1\t 0x%02x\t\t\t", entry->xd.addr1);
printf("[5] namlen\t%d\n", entry->namlen);
@@ -718,7 +719,7 @@ char display_leaf_xads(xad_t * xad, shor
for (i = 2; i < nextindex; i++) {
printf("XAD # = %d\n", i);
printf("[1] xad.flag\t %x\t\t", xad[i].flag);
- printf("[4] xad.len\t 0x%06x\n", xad[i].len);
+ printf("[4] xad.len\t 0x%06x\n", lengthXAD(&xad[i]));
printf("[2] xad.off1\t 0x%02x\t\t", xad[i].off1);
printf("[5] xad.addr1\t 0x%02x\n", xad[i].addr1);
printf("[3] xad.off2\t 0x%08x\t", xad[i].off2);
@@ -740,7 +741,7 @@ char display_internal_xads(xad_t * xad,
for (i = 2; i < nextindex; i++) {
printf("XAD # = %d\n", i);
printf("[1] xad.flag\t %x\t\t", xad[i].flag);
- printf("[4] xad.len\t 0x%06x\n", xad[i].len);
+ printf("[4] xad.len\t 0x%06x\n", lengthXAD(&xad[i]));
printf("[2] xad.off1\t 0x%02x\t\t", xad[i].off1);
printf("[5] xad.addr1\t 0x%02x\n", xad[i].addr1);
printf("[3] xad.off2\t 0x%08x\t", xad[i].off2);
@@ -813,7 +814,8 @@ char display_internal_xtpage(xad_t xad)
xtree->header.maxentry = strtoul(token, 0, 0);
break;
case 4:
- xtree->header.self.len = strtoul(token, 0, 0);
+ PXDlength(&xtree->header.self,
+ strtoul(token, 0, 0));
break;
case 5:
xtree->header.self.addr1 = strtoul(token, 0, 0);
@@ -912,7 +914,7 @@ char display_extent_page(int64_t address
printf("[3] freecnt\t%3d\t\t", node.header.freecnt);
printf("[7] rsrvd\tNOT DISPLAYED\n");
printf("[4] freelist\t%3d\t\t", node.header.freelist);
- printf("[8] self.len\t0x%06x\n", node.header.self.len);
+ printf("[8] self.len\t0x%06x\n", lengthPXD(&node.header.self));
printf("[5] maxslot\t%3d\t\t", node.header.maxslot);
printf("[8] self.addr1\t0x%02x\n", node.header.self.addr1);
printf("[6] stblindex\t%d\t\t", node.header.stblindex);
Index: jfsutils/xpeek/iag.c
===================================================================
RCS file: /cvsroot/jfs/jfsutils/xpeek/iag.c,v
retrieving revision 1.7
diff -u -p -r1.7 iag.c
--- jfsutils/xpeek/iag.c 23 Sep 2002 21:07:45 -0000 1.7
+++ jfsutils/xpeek/iag.c 2 Aug 2005 14:25:35 -0000
@@ -388,7 +388,7 @@ int display_ext(pxd_t * ext, char *cmdli
goto ext_retry;
}
ext_changed:
- printf("[1] inoext[%d].len:\t%d\n", index, ext[index].len);
+ printf("[1] inoext[%d].len:\t%d\n", index, lengthPXD(&ext[index]));
printf("[2] inoext[%d].addr1:\t0x%02x\n", index, ext[index].addr1);
printf("[3] inoext[%d].addr2:\t0x%08x\n", index, ext[index].addr2);
printf(" addressPXD:\t\t%lld\n", (long long) addressPXD(&ext[index]));
@@ -409,7 +409,7 @@ int display_ext(pxd_t * ext, char *cmdli
switch (field) {
case 1:
- ext[index].len = strtol(token, 0, 0);
+ PXDlength(&ext[index], strtol(token, 0, 0));
break;
case 2:
ext[index].addr1 = strtol(token, 0, 16);
Index: jfsutils/xpeek/inode.c
===================================================================
RCS file: /cvsroot/jfs/jfsutils/xpeek/inode.c,v
retrieving revision 1.8
diff -u -p -r1.8 inode.c
--- jfsutils/xpeek/inode.c 13 Nov 2002 21:09:18 -0000 1.8
+++ jfsutils/xpeek/inode.c 2 Aug 2005 14:25:35 -0000
@@ -147,12 +147,12 @@ void display_inode(struct dinode *inode)
printf("[21] di_otime.tv_nsec:\t0x%08x\n", inode->di_otime.tv_nsec);
printf("[4] di_gen:\t\t%d\t\t", inode->di_gen);
printf("[22] di_acl.flag:\t0x%02x\n", inode->di_acl.flag);
- printf("[5] di_ixpxd.len:\t%d\t\t", inode->di_ixpxd.len);
+ printf("[5] di_ixpxd.len:\t%d\t\t", lengthPXD(&inode->di_ixpxd));
printf("[23] di_acl.rsrvd:\tNot Displayed\n");
printf("[6] di_ixpxd.addr1:\t0x%02x\t\t", inode->di_ixpxd.addr1);
printf("[24] di_acl.size:\t0x%08x\n", inode->di_acl.size);
printf("[7] di_ixpxd.addr2:\t0x%08x\t", inode->di_ixpxd.addr2);
- printf("[25] di_acl.len:\t%d\n", inode->di_acl.len);
+ printf("[25] di_acl.len:\t%d\n", lengthDXD(&inode->di_acl));
printf(" di_ixpxd.address:\t%lld\t\t", (long long) addressPXD(&(inode->di_ixpxd)));
printf("[26] di_acl.addr1:\t0x%02x\n", inode->di_acl.addr1);
printf("[8] di_size:\t0x%016llx\t", (long long) inode->di_size);
@@ -166,7 +166,7 @@ void display_inode(struct dinode *inode)
printf("[12] di_gid:\t\t%d\t\t", inode->di_gid);
printf("[30] di_ea.size:\t0x%08x\n", inode->di_ea.size);
printf("[13] di_mode:\t\t0x%08x\t", inode->di_mode);
- printf("[31] di_ea.len:\t\t%d\n", inode->di_ea.len);
+ printf("[31] di_ea.len:\t\t%d\n", lengthDXD(&inode->di_ea));
printf("\t\t%07o\t%10s\t", inode->di_mode & 0177777, mode_string(inode->di_mode));
printf("[32] di_ea.addr1:\t0x%02x\n", inode->di_ea.addr1);
printf("[14] di_atime.tv_sec:\t0x%08x\t", inode->di_atime.tv_sec);
@@ -210,7 +210,7 @@ int change_inode(struct dinode *inode)
inode->di_gen = strtol(token, 0, 0);
break;
case 5:
- inode->di_ixpxd.len = strtoul(token, 0, 0);
+ PXDlength(&inode->di_ixpxd, strtoul(token, 0, 0));
break;
case 6:
inode->di_ixpxd.addr1 = strtoul(token, 0, 0);
@@ -271,7 +271,7 @@ int change_inode(struct dinode *inode)
inode->di_acl.size = strtol(token, 0, 16);
break;
case 25:
- inode->di_acl.len = strtol(token, 0, 0);
+ DXDlength(&inode->di_acl, strtol(token, 0, 0));
break;
case 26:
inode->di_acl.addr1 = strtol(token, 0, 16);
@@ -286,7 +286,7 @@ int change_inode(struct dinode *inode)
inode->di_ea.size = strtol(token, 0, 16);
break;
case 31:
- inode->di_ea.len = strtol(token, 0, 0);
+ DXDlength(&inode->di_ea, strtol(token, 0, 0));
break;
case 32:
inode->di_ea.addr1 = strtol(token, 0, 16);
@@ -383,7 +383,7 @@ int find_inode(unsigned inum, unsigned w
/* swap if on big endian machine */
ujfs_swap_iag(&iag);
- if (iag.inoext[extnum].len == 0)
+ if (lengthPXD(&iag.inoext[extnum]) == 0)
return 1;
*address = (addressPXD(&iag.inoext[extnum]) << l2bsize) +
Index: jfsutils/xpeek/super.c
===================================================================
RCS file: /cvsroot/jfs/jfsutils/xpeek/super.c,v
retrieving revision 1.11
diff -u -p -r1.11 super.c
--- jfsutils/xpeek/super.c 7 Jul 2003 20:56:03 -0000 1.11
+++ jfsutils/xpeek/super.c 2 Aug 2005 14:25:35 -0000
@@ -183,7 +183,7 @@ int display_super(struct superblock *sb)
printf("[5] s_l2bsize:\t\t%d\t\t", sb->s_l2bsize);
printf("[18] s_logserial:\t0x%08x\n", sb->s_logserial);
printf("[6] s_l2bfactor:\t%d\t\t", sb->s_l2bfactor);
- printf("[19] s_logpxd.len:\t%d\n", __cpu_to_le24(sb->s_logpxd.len));
+ printf("[19] s_logpxd.len:\t%d\n", lengthPXD(&sb->s_logpxd));
printf("[7] s_pbsize:\t\t%d\t\t", sb->s_pbsize);
printf("[20] s_logpxd.addr1:\t0x%02x\n", sb->s_logpxd.addr1);
printf("[8] s_l2pbsize:\t\t%d\t\t", sb->s_l2pbsize);
@@ -191,7 +191,7 @@ int display_super(struct superblock *sb)
printf("[9] pad:\t\tNot Displayed\t");
printf(" s_logpxd.address:\t%lld\n", (long long) addressPXD(&sb->s_logpxd));
printf("[10] s_agsize:\t\t0x%08x\t", sb->s_agsize);
- printf("[22] s_fsckpxd.len:\t%d\n", __cpu_to_le24(sb->s_fsckpxd.len));
+ printf("[22] s_fsckpxd.len:\t%d\n", lengthPXD(&sb->s_fsckpxd));
printf("[11] s_flag:\t\t0x%08x\t", sb->s_flag);
printf("[23] s_fsckpxd.addr1:\t0x%02x\n", sb->s_fsckpxd.addr1);
printf("\t %s %s\t", os2_platform, linux_platform);
@@ -221,7 +221,7 @@ int display_super(struct superblock *sb)
printf("[30] s_loguuid:\t\t%s", uuid_unparsed);
}
printf("\n");
- printf("[14] s_ait2.len:\t%d\t\t\n", __cpu_to_le24(sb->s_ait2.len));
+ printf("[14] s_ait2.len:\t%d\t\t\n", lengthPXD(&sb->s_ait2));
printf("\n");
retry:
@@ -281,7 +281,7 @@ int display_super(struct superblock *sb)
sb->s_compress = strtoul(token, 0, 0);
break;
case 14:
- sb->s_ait2.len = __le24_to_cpu(strtoul(token, 0, 0));
+ PXDlength(&sb->s_ait2, strtoul(token, 0, 0));
break;
case 15:
sb->s_ait2.addr1 = strtoul(token, 0, 16);
@@ -296,7 +296,7 @@ int display_super(struct superblock *sb)
sb->s_logserial = strtol(token, 0, 16);
break;
case 19:
- sb->s_logpxd.len = __le24_to_cpu(strtoul(token, 0, 0));
+ PXDlength(&sb->s_logpxd, strtoul(token, 0, 0));
break;
case 20:
sb->s_logpxd.addr1 = strtoul(token, 0, 16);
@@ -305,7 +305,7 @@ int display_super(struct superblock *sb)
sb->s_logpxd.addr2 = __le32_to_cpu(strtoul(token, 0, 16));
break;
case 22:
- sb->s_fsckpxd.len = __le24_to_cpu(strtoul(token, 0, 0));
+ PXDlength(&sb->s_fsckpxd, strtoul(token, 0, 0));
break;
case 23:
sb->s_fsckpxd.addr1 = strtoul(token, 0, 16);
Index: jfsutils/xpeek/super2.c
===================================================================
RCS file: /cvsroot/jfs/jfsutils/xpeek/super2.c,v
retrieving revision 1.10
diff -u -p -r1.10 super2.c
--- jfsutils/xpeek/super2.c 21 Mar 2003 15:34:24 -0000 1.10
+++ jfsutils/xpeek/super2.c 2 Aug 2005 14:25:35 -0000
@@ -162,7 +162,7 @@ int display_super2(struct superblock *sb
dasdprime = " ";
printf("[1] s_magic:\t\t'%4.4s'\t\t", sb->s_magic);
- printf("[16] s_aim2.len:\t%d\n", __cpu_to_le24(sb->s_aim2.len));
+ printf("[16] s_aim2.len:\t%d\n", lengthPXD(&sb->s_aim2));
printf("[2] s_version:\t\t%d\t\t", sb->s_version);
printf("[17] s_aim2.addr1:\t0x%02x\n", sb->s_aim2.addr1);
printf("[3] s_size:\t0x%016llx\t", (long long) sb->s_size);
@@ -174,7 +174,7 @@ int display_super2(struct superblock *sb
printf("[6] s_l2bfactor:\t%d\t\t", sb->s_l2bfactor);
printf("[20] s_logserial:\t0x%08x\n", sb->s_logserial);
printf("[7] s_pbsize:\t\t%d\t\t", sb->s_pbsize);
- printf("[21] s_logpxd.len:\t%d\n", __cpu_to_le24(sb->s_logpxd.len));
+ printf("[21] s_logpxd.len:\t%d\n", lengthPXD(&sb->s_logpxd));
printf("[8] s_l2pbsize:\t\t%d\t\t", sb->s_l2pbsize);
printf("[22] s_logpxd.addr1:\t0x%02x\n", sb->s_logpxd.addr1);
printf("[9] s_agsize:\t\t0x%08x\t", sb->s_agsize);
@@ -182,7 +182,7 @@ int display_super2(struct superblock *sb
printf("[10] s_flag:\t\t0x%08x\t", sb->s_flag);
printf(" s_logpxd.address:\t%lld\n", (long long) addressPXD(&sb->s_logpxd));
printf(" %s %s \t", os2_platform, linux_platform);
- printf("[24] s_fsckpxd.len:\t%d\n", __cpu_to_le24(sb->s_fsckpxd.len));
+ printf("[24] s_fsckpxd.len:\t%d\n", lengthPXD(&sb->s_fsckpxd));
printf(" %s %s %s\t", groupcommit, lazycommit, badsait);
printf("[25] s_fsckpxd.addr1:\t0x%02x\n", sb->s_fsckpxd.addr1);
printf(" %s %s \t", sparse, inlinelog);
@@ -195,7 +195,7 @@ int display_super2(struct superblock *sb
printf("[28] s_fscklog:\t\t%d\t\n", sb->s_fscklog);
printf("[12] s_compress:\t%d\t\t", sb->s_compress);
printf("[29] s_fpack:\t\t'%8s'\n", sb->s_fpack);
- printf("[13] s_ait2.len:\t%d\t\t", __cpu_to_le24(sb->s_ait2.len));
+ printf("[13] s_ait2.len:\t%d\t\t", lengthPXD(&sb->s_ait2));
if (sb->s_version == JFS_VERSION) {
uuid_unparse(sb->s_uuid, uuid_unparsed);
printf("[30] s_uuid:\t\t%s", uuid_unparsed);
@@ -268,7 +268,7 @@ int display_super2(struct superblock *sb
sb->s_compress = strtoul(token, 0, 0);
break;
case 13:
- sb->s_ait2.len = __le24_to_cpu(strtoul(token, 0, 0));
+ PXDlength(&sb->s_ait2, strtoul(token, 0, 0));
break;
case 14:
sb->s_ait2.addr1 = strtoul(token, 0, 16);
@@ -277,7 +277,7 @@ int display_super2(struct superblock *sb
sb->s_ait2.addr2 = __le32_to_cpu(strtoul(token, 0, 16));
break;
case 16:
- sb->s_aim2.len = __le24_to_cpu(strtoul(token, 0, 0));
+ PXDlength(&sb->s_aim2, strtoul(token, 0, 0));
break;
case 17:
sb->s_aim2.addr1 = strtoul(token, 0, 16);
@@ -292,7 +292,7 @@ int display_super2(struct superblock *sb
sb->s_logserial = strtol(token, 0, 16);
break;
case 21:
- sb->s_logpxd.len = __le24_to_cpu(strtoul(token, 0, 0));
+ PXDlength(&sb->s_logpxd, strtoul(token, 0, 0));
break;
case 22:
sb->s_logpxd.addr1 = strtoul(token, 0, 16);
@@ -301,7 +301,7 @@ int display_super2(struct superblock *sb
sb->s_logpxd.addr2 = __le32_to_cpu(strtoul(token, 0, 16));
break;
case 24:
- sb->s_fsckpxd.len = __le24_to_cpu(strtoul(token, 0, 0));
+ PXDlength(&sb->s_fsckpxd, strtoul(token, 0, 0));
break;
case 25:
sb->s_fsckpxd.addr1 = strtoul(token, 0, 16);