xfs
[Top] [All Lists]

[PATCH] xfs_db: Fix extent record printing on big endian

To: xfs-oss <xfs@xxxxxxxxxxx>
Subject: [PATCH] xfs_db: Fix extent record printing on big endian
From: Eric Sandeen <sandeen@xxxxxxxxxx>
Date: Wed, 20 Jun 2012 15:40:53 -0500
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:12.0) Gecko/20120428 Thunderbird/12.0.1
Extent records which should have been printed as:

a.bmx[0] = [startoff,startblock,blockcount,extentflag] 0:[0,12,17,0]

for example, were instead being printed as:

a.bmx[0] = [startoff,startblock,blockcount,extentflag] 0:[0,12884910592,0,0]

in xfs_db.  It was simply mis-parsing the extent records due to wrong
#defines for big-endian machines.

It's been broken since at least xfsprogs-2.6.13, causing xfstests 021
to fail.

Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
---

Why this works is, um ...left as an exercise to the reviewer for now ;)
TBH I get lost in xfs_db, and I'm not sure how endianness is handled,
but it's pretty clearly not like this!

diff --git a/db/btblock.c b/db/btblock.c
index f6e8a68..2c199b2 100644
--- a/db/btblock.c
+++ b/db/btblock.c
@@ -250,23 +250,12 @@ const field_t     bmapbtd_key_flds[] = {
 };
 #undef KOFF
 
-#ifndef XFS_NATIVE_HOST
-
 #define BMBT_EXNTFLAG_BITOFF   0
 #define BMBT_STARTOFF_BITOFF   (BMBT_EXNTFLAG_BITOFF + BMBT_EXNTFLAG_BITLEN)
 #define BMBT_STARTBLOCK_BITOFF (BMBT_STARTOFF_BITOFF + BMBT_STARTOFF_BITLEN)
 #define BMBT_BLOCKCOUNT_BITOFF \
        (BMBT_STARTBLOCK_BITOFF + BMBT_STARTBLOCK_BITLEN)
 
-#else
-
-#define BMBT_EXNTFLAG_BITOFF   63
-#define BMBT_STARTOFF_BITOFF   (BMBT_EXNTFLAG_BITOFF - BMBT_STARTOFF_BITLEN)
-#define BMBT_STARTBLOCK_BITOFF 85 /* 128 - 43 (other 9 is in first word) */
-#define BMBT_BLOCKCOUNT_BITOFF 64 /* Start of second 64 bit container */
-
-#endif /* XFS_NATIVE_HOST */
-
 const field_t  bmapbta_rec_flds[] = {
        { "startoff", FLDT_CFILEOFFA, OI(BMBT_STARTOFF_BITOFF), C1, 0,
          TYP_ATTR },

<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] xfs_db: Fix extent record printing on big endian, Eric Sandeen <=