From: Christoph Hellwig Date: Tue, 7 Jun 2005 14:56:07 +0000 (+0000) Subject: resync endianess handling in xfsprogs with the kernel X-Git-Tag: v2.7.0~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b34acbbade6a22c6bfc6d29be78dc557868345f7;p=thirdparty%2Fxfsprogs-dev.git resync endianess handling in xfsprogs with the kernel --- diff --git a/db/check.c b/db/check.c index a83584ba9..861e64b68 100644 --- a/db/check.c +++ b/db/check.c @@ -4448,7 +4448,7 @@ scanfunc_ino( continue; } for (j = 0, nfree = 0; j < XFS_INODES_PER_CHUNK; j++) { - if ((isfree = XFS_INOBT_IS_FREE(&rp[i], j, ARCH_CONVERT))) + if ((isfree = XFS_INOBT_IS_FREE_DISK(&rp[i], j))) nfree++; process_inode(agf, agino + j, (xfs_dinode_t *)((char *)iocur_top->data + ((off + j) << mp->m_sb.sb_inodelog)), diff --git a/db/frag.c b/db/frag.c index 0a21dd97d..47a2614e7 100644 --- a/db/frag.c +++ b/db/frag.c @@ -518,7 +518,7 @@ scanfunc_ino( &dip->di_core, &tdic, 1); memcpy(&dip->di_core, &tdic, sizeof(xfs_dinode_core_t)); - if (XFS_INOBT_IS_FREE(&rp[i], j, ARCH_CONVERT)) + if (XFS_INOBT_IS_FREE_DISK(&rp[i], j)) continue; process_inode(agf, agino + j, (xfs_dinode_t *)((char *)iocur_top->data + ((off + j) << mp->m_sb.sb_inodelog))); diff --git a/include/libxfs.h b/include/libxfs.h index 9820de5d5..153cec575 100644 --- a/include/libxfs.h +++ b/include/libxfs.h @@ -455,7 +455,7 @@ extern xfs_dahash_t libxfs_da_hashname (uchar_t *, int); extern int libxfs_attr_leaf_newentsize (xfs_da_args_t *, int, int *); extern void libxfs_bmbt_get_all (xfs_bmbt_rec_t *, xfs_bmbt_irec_t *); -#if ARCH_CONVERT != ARCH_NOCONVERT +#if __BYTE_ORDER != __BIG_ENDIAN extern void libxfs_bmbt_disk_get_all (xfs_bmbt_rec_t *, xfs_bmbt_irec_t *); #else # define libxfs_bmbt_disk_get_all(r,s) libxfs_bmbt_get_all(r,s) diff --git a/include/xfs_ialloc_btree.h b/include/xfs_ialloc_btree.h index 1232daf36..44be18867 100644 --- a/include/xfs_ialloc_btree.h +++ b/include/xfs_ialloc_btree.h @@ -100,22 +100,25 @@ xfs_inofree_t xfs_inobt_mask(int i); #endif #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_INOBT_IS_FREE) int xfs_inobt_is_free(xfs_inobt_rec_t *rp, int i); -#define XFS_INOBT_IS_FREE(rp,i) xfs_inobt_is_free(rp,i) +#define XFS_INOBT_IS_FREE(rp,i) xfs_inobt_is_free(rp,i) +#define XFS_INOBT_IS_FREE_DISK(rp,i) xfs_inobt_is_free_disk(rp,i) #else -#define XFS_INOBT_IS_FREE(rp,i,arch) ((INT_GET((rp)->ir_free, arch) \ - & XFS_INOBT_MASK(i)) != 0) +#define XFS_INOBT_IS_FREE(rp,i) \ + (((rp)->ir_free & XFS_INOBT_MASK(i)) != 0) +#define XFS_INOBT_IS_FREE_DISK(rp,i) \ + ((INT_GET((rp)->ir_free, ARCH_CONVERT) & XFS_INOBT_MASK(i)) != 0) #endif #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_INOBT_SET_FREE) void xfs_inobt_set_free(xfs_inobt_rec_t *rp, int i); #define XFS_INOBT_SET_FREE(rp,i) xfs_inobt_set_free(rp,i) #else -#define XFS_INOBT_SET_FREE(rp,i,arch) (INT_MOD_EXPR((rp)->ir_free, arch, |= XFS_INOBT_MASK(i))) +#define XFS_INOBT_SET_FREE(rp,i) ((rp)->ir_free |= XFS_INOBT_MASK(i)) #endif #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_INOBT_CLR_FREE) void xfs_inobt_clr_free(xfs_inobt_rec_t *rp, int i); #define XFS_INOBT_CLR_FREE(rp,i) xfs_inobt_clr_free(rp,i) #else -#define XFS_INOBT_CLR_FREE(rp,i,arch) (INT_MOD_EXPR((rp)->ir_free, arch, &= ~XFS_INOBT_MASK(i))) +#define XFS_INOBT_CLR_FREE(rp,i) ((rp)->ir_free &= ~XFS_INOBT_MASK(i)) #endif /* diff --git a/libxfs/xfs.h b/libxfs/xfs.h index bdffc7f87..78d6add80 100644 --- a/libxfs/xfs.h +++ b/libxfs/xfs.h @@ -64,11 +64,10 @@ #define xfs_xlatesb libxfs_xlate_sb #define xfs_xlate_dinode_core libxfs_xlate_dinode_core -#if ARCH_CONVERT != ARCH_NOCONVERT #define xfs_bmbt_get_all libxfs_bmbt_get_all +#if __BYTE_ORDER != __BIG_ENDIAN #define xfs_bmbt_disk_get_all libxfs_bmbt_disk_get_all #else -#define xfs_bmbt_get_all libxfs_bmbt_get_all #define xfs_bmbt_disk_get_all libxfs_bmbt_get_all #endif #define xfs_da_hashname libxfs_da_hashname @@ -487,7 +486,7 @@ int xfs_bmbt_update (struct xfs_btree_cur *, xfs_fileoff_t, xfs_fsblock_t, xfs_filblks_t, xfs_exntst_t); void xfs_bmbt_to_bmdr (xfs_bmbt_block_t *, int, xfs_bmdr_block_t *, int); void xfs_bmdr_to_bmbt (xfs_bmdr_block_t *, int, xfs_bmbt_block_t *, int); -#if ARCH_CONVERT != ARCH_NOCONVERT +#if __BYTE_ORDER != __BIG_ENDIAN xfs_fileoff_t xfs_bmbt_disk_get_startoff (xfs_bmbt_rec_t *); void xfs_bmbt_disk_set_all (xfs_bmbt_rec_t *, xfs_bmbt_irec_t *); void xfs_bmbt_disk_set_allf (xfs_bmbt_rec_t *, xfs_fileoff_t, xfs_fsblock_t, diff --git a/libxfs/xfs_bmap_btree.c b/libxfs/xfs_bmap_btree.c index 45754a5c6..4815460a5 100644 --- a/libxfs/xfs_bmap_btree.c +++ b/libxfs/xfs_bmap_btree.c @@ -1625,7 +1625,7 @@ xfs_bmbt_get_block( } /* - * Extract the blockcount field from a bmap extent record. + * Extract the blockcount field from an in memory bmap extent record. */ xfs_filblks_t xfs_bmbt_get_blockcount( @@ -1635,7 +1635,7 @@ xfs_bmbt_get_blockcount( } /* - * Extract the startblock field from a bmap extent record. + * Extract the startblock field from an in memory bmap extent record. */ xfs_fsblock_t xfs_bmbt_get_startblock( @@ -1659,7 +1659,7 @@ xfs_bmbt_get_startblock( } /* - * Extract the startoff field from a bmap extent record. + * Extract the startoff field from an in memory bmap extent record. */ xfs_fileoff_t xfs_bmbt_get_startoff( @@ -1680,7 +1680,7 @@ xfs_bmbt_get_state( ext_flag); } -#if ARCH_CONVERT != ARCH_NOCONVERT +#if __BYTE_ORDER != __BIG_ENDIAN /* Endian flipping versions of the bmbt extraction functions */ void xfs_bmbt_disk_get_all( @@ -2208,7 +2208,7 @@ xfs_bmbt_set_allf( #endif /* XFS_BIG_BLKNOS */ } -#if ARCH_CONVERT != ARCH_NOCONVERT +#if __BYTE_ORDER != __BIG_ENDIAN /* * Set all the fields in a bmap extent record from the uncompressed form. */ diff --git a/libxfs/xfs_ialloc.c b/libxfs/xfs_ialloc.c index 4671bcc36..e421c0440 100644 --- a/libxfs/xfs_ialloc.c +++ b/libxfs/xfs_ialloc.c @@ -852,7 +852,7 @@ nextag: ASSERT((XFS_AGINO_TO_OFFSET(mp, rec.ir_startino) % XFS_INODES_PER_CHUNK) == 0); ino = XFS_AGINO_TO_INO(mp, agno, rec.ir_startino + offset); - XFS_INOBT_CLR_FREE(&rec, offset, ARCH_NOCONVERT); + XFS_INOBT_CLR_FREE(&rec, offset); rec.ir_freecount--; if ((error = xfs_inobt_update(cur, rec.ir_startino, rec.ir_freecount, rec.ir_free))) diff --git a/repair/incore.h b/repair/incore.h index 5fa7f5e5b..a83bdabed 100644 --- a/repair/incore.h +++ b/repair/incore.h @@ -478,17 +478,17 @@ void clear_uncertain_ino_cache(xfs_agnumber_t agno); */ #define set_inode_free(ino_rec, ino_offset) \ XFS_INOCF_SET_CF((ino_rec), (ino_offset)), \ - XFS_INOBT_SET_FREE((ino_rec), (ino_offset), ARCH_NOCONVERT) + XFS_INOBT_SET_FREE((ino_rec), (ino_offset)) #define set_inode_used(ino_rec, ino_offset) \ XFS_INOCF_SET_CF((ino_rec), (ino_offset)), \ - XFS_INOBT_CLR_FREE((ino_rec), (ino_offset), ARCH_NOCONVERT) + XFS_INOBT_CLR_FREE((ino_rec), (ino_offset)) #define is_inode_used(ino_rec, ino_offset) \ - !XFS_INOBT_IS_FREE((ino_rec), (ino_offset), ARCH_NOCONVERT) + !XFS_INOBT_IS_FREE((ino_rec), (ino_offset)) #define is_inode_free(ino_rec, ino_offset) \ - XFS_INOBT_IS_FREE((ino_rec), (ino_offset), ARCH_NOCONVERT) + XFS_INOBT_IS_FREE((ino_rec), (ino_offset)) /* * add_inode_reached() is set on inode I only if I has been reached diff --git a/repair/phase7.c b/repair/phase7.c index 70cb0323e..96949848a 100644 --- a/repair/phase7.c +++ b/repair/phase7.c @@ -48,12 +48,11 @@ set_nlinks(xfs_dinode_core_t *dinoc, int *dirty) { if (!no_modify) { - if (INT_GET(dinoc->di_nlink, ARCH_NOCONVERT) != nrefs) { + if (dinoc->di_nlink != nrefs) { *dirty = 1; do_warn( _("resetting inode %llu nlinks from %d to %d\n"), - ino, INT_GET(dinoc->di_nlink, ARCH_NOCONVERT), - nrefs); + ino, dinoc->di_nlink, nrefs); if (nrefs > XFS_MAXLINK_1) { ASSERT(fs_inode_nlink); @@ -62,14 +61,13 @@ _("nlinks %d will overflow v1 ino, ino %llu will be converted to version 2\n"), nrefs, ino); } - INT_SET(dinoc->di_nlink, ARCH_NOCONVERT, nrefs); + dinoc->di_nlink = nrefs; } } else { - if (INT_GET(dinoc->di_nlink, ARCH_NOCONVERT) != nrefs) + if (dinoc->di_nlink != nrefs) do_warn( _("would have reset inode %llu nlinks from %d to %d\n"), - ino, INT_GET(dinoc->di_nlink, ARCH_NOCONVERT), - nrefs); + ino, dinoc->di_nlink, nrefs); } } diff --git a/repair/scan.c b/repair/scan.c index 9400b5b62..e50ea3bc6 100644 --- a/repair/scan.c +++ b/repair/scan.c @@ -1028,7 +1028,7 @@ _("inode rec for ino %llu (%d/%d) overlaps existing rec (start %d/%d)\n"), * inode tree. */ if (!suspect) { - if (XFS_INOBT_IS_FREE(&rp[i], 0, ARCH_CONVERT)) { + if (XFS_INOBT_IS_FREE_DISK(&rp[i], 0)) { nfree++; ino_rec = set_inode_free_alloc(agno, ino); @@ -1037,7 +1037,7 @@ _("inode rec for ino %llu (%d/%d) overlaps existing rec (start %d/%d)\n"), ino); } for (j = 1; j < XFS_INODES_PER_CHUNK; j++) { - if (XFS_INOBT_IS_FREE(&rp[i], j, ARCH_CONVERT)) { + if (XFS_INOBT_IS_FREE_DISK(&rp[i], j)) { nfree++; set_inode_free(ino_rec, j); } else { @@ -1046,7 +1046,7 @@ _("inode rec for ino %llu (%d/%d) overlaps existing rec (start %d/%d)\n"), } } else { for (j = 0; j < XFS_INODES_PER_CHUNK; j++) { - if (XFS_INOBT_IS_FREE(&rp[i], j, ARCH_CONVERT)) { + if (XFS_INOBT_IS_FREE_DISK(&rp[i], j)) { nfree++; add_aginode_uncertain(agno, ino + j, 1);