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);

Reply via email to