From: Nathan Scott Date: Tue, 23 Oct 2001 23:44:04 +0000 (+0000) Subject: sync userpsace with recent XFS kernel changes - this does not affect X-Git-Tag: v2.0.0~33 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=63be04eb40ca9fd8e8c50eeb9b1bf8dd3d8a7253;p=thirdparty%2Fxfsprogs-dev.git sync userpsace with recent XFS kernel changes - this does not affect userspace (libxfs), all affected code is removed by cpp. some of the added kernel diagnostics did not endian convert where needed - these instances have been corrected. --- diff --git a/doc/CHANGES b/doc/CHANGES index cce19dde7..2eb1b61f3 100644 --- a/doc/CHANGES +++ b/doc/CHANGES @@ -1,3 +1,7 @@ +xfsprogs-current + - sync with recent kernel changes - this does not affect + userspace (libxfs), all affected code is removed by cpp. + xfsprogs-1.3.12 (17 October 2001) - implement the -f (file) option to xfs_logprint - rework the xlog code into libxlog for code sharing diff --git a/include/xfs_quota.h b/include/xfs_quota.h index a86651c4a..001188269 100644 --- a/include/xfs_quota.h +++ b/include/xfs_quota.h @@ -296,7 +296,11 @@ extern void xfs_qm_dqrele_all_inodes(struct xfs_mount *, uint); */ #define xfs_trans_reserve_blkquota(tp, ip, nblks) \ xfs_trans_reserve_quota_nblks(tp, ip, nblks, 0, XFS_QMOPT_RES_REGBLKS) - + +#define xfs_trans_reserve_blkquota_force(tp, ip, nblks) \ +xfs_trans_reserve_quota_nblks(tp, ip, nblks, 0, \ + XFS_QMOPT_RES_REGBLKS|XFS_QMOPT_FORCE_RES) + #define xfs_trans_unreserve_blkquota(tp, ip, nblks) \ xfs_trans_reserve_quota_nblks(tp, ip, -(nblks), 0, XFS_QMOPT_RES_REGBLKS) diff --git a/libxfs/xfs_alloc.c b/libxfs/xfs_alloc.c index 7bae28a43..8786269bd 100644 --- a/libxfs/xfs_alloc.c +++ b/libxfs/xfs_alloc.c @@ -2095,6 +2095,31 @@ xfs_alloc_read_agf( if (XFS_TEST_ERROR(!agf_ok, mp, XFS_ERRTAG_ALLOC_READ_AGF, XFS_RANDOM_ALLOC_READ_AGF)) { xfs_trans_brelse(tp, bp); +#ifdef __KERNEL__ /* additional, temporary, debugging code */ + cmn_err(CE_NOTE, + "xfs_alloc_read_agf: error in <%s> AG %d", + mp->m_fsname, agno); + if (INT_GET(agf->agf_magicnum, ARCH_CONVERT) != XFS_AGF_MAGIC) + cmn_err(CE_NOTE, "bad agf_magicnum 0x%x", + INT_GET(agf->agf_magicnum, ARCH_CONVERT)); + if (!XFS_AGF_GOOD_VERSION(INT_GET(agf->agf_versionnum, ARCH_CONVERT))) + cmn_err(CE_NOTE, "Bad version number 0x%x", + INT_GET(agf->agf_versionnum, ARCH_CONVERT)); + if (!(INT_GET(agf->agf_freeblks, ARCH_CONVERT) <= + INT_GET(agf->agf_length, ARCH_CONVERT))) + cmn_err(CE_NOTE, "Bad freeblks %d %d", + INT_GET(agf->agf_freeblks, ARCH_CONVERT), + INT_GET(agf->agf_length, ARCH_CONVERT)); + if (!(INT_GET(agf->agf_flfirst, ARCH_CONVERT) < XFS_AGFL_SIZE)) + cmn_err(CE_NOTE, "Bad flfirst %d", + INT_GET(agf->agf_flfirst, ARCH_CONVERT)); + if (!(INT_GET(agf->agf_fllast, ARCH_CONVERT) < XFS_AGFL_SIZE)) + cmn_err(CE_NOTE, "Bad fllast %d", + INT_GET(agf->agf_fllast, ARCH_CONVERT)); + if (!(INT_GET(agf->agf_flcount, ARCH_CONVERT) <= XFS_AGFL_SIZE)) + cmn_err(CE_NOTE, "Bad flcount %d", + INT_GET(agf->agf_flcount, ARCH_CONVERT)); +#endif return XFS_ERROR(EFSCORRUPTED); } pag = &mp->m_perag[agno]; diff --git a/libxfs/xfs_bmap.c b/libxfs/xfs_bmap.c index 1e68e0407..0b1c20323 100644 --- a/libxfs/xfs_bmap.c +++ b/libxfs/xfs_bmap.c @@ -3435,7 +3435,28 @@ xfs_bmap_read_extents( break; pp = XFS_BTREE_PTR_ADDR(mp->m_sb.sb_blocksize, xfs_bmbt, block, 1, mp->m_bmap_dmxr[1]); - XFS_WANT_CORRUPTED_GOTO(XFS_FSB_SANITY_CHECK(mp, INT_GET(*pp, ARCH_CONVERT)), error0); +#ifndef __KERNEL__ + XFS_WANT_CORRUPTED_GOTO( + XFS_FSB_SANITY_CHECK(mp, INT_GET(*pp, ARCH_CONVERT)), + error0); +#else /* additional, temporary, debugging code */ + if (!(XFS_FSB_SANITY_CHECK(mp, INT_GET(*pp, ARCH_CONVERT)))) { + cmn_err(CE_NOTE, + "xfs_bmap_read_extents: FSB Sanity Check:"); + if (!(XFS_FSB_TO_AGNO(mp, INT_GET(*pp, ARCH_CONVERT)) < mp->m_sb.sb_agcount)) + cmn_err(CE_NOTE, + "bad AG count %d < agcount %d", + XFS_FSB_TO_AGNO(mp, INT_GET(*pp, ARCH_CONVERT)), + mp->m_sb.sb_agcount); + if (!(XFS_FSB_TO_AGBNO(mp, INT_GET(*pp, ARCH_CONVERT)) < mp->m_sb.sb_agblocks)) + cmn_err(CE_NOTE, + "bad AG BNO %d < %d", + XFS_FSB_TO_AGBNO(mp, INT_GET(*pp, ARCH_CONVERT)), + mp->m_sb.sb_agblocks); + error = XFS_ERROR(EFSCORRUPTED); + goto error0; + } +#endif bno = INT_GET(*pp, ARCH_CONVERT); xfs_trans_brelse(tp, bp); } @@ -3463,9 +3484,35 @@ xfs_bmap_read_extents( (unsigned long long) ip->i_ino); goto error0; } +#ifndef __KERNEL__ XFS_WANT_CORRUPTED_GOTO( XFS_BMAP_SANITY_CHECK(mp, block, 0), error0); +#else /* additional, temporary, debugging code */ + if (!(XFS_BMAP_SANITY_CHECK(mp, block, 0))) { + cmn_err(CE_NOTE, + "xfs_bmap_read_extents: BMAP Sanity Check:"); + if (!(INT_GET(block->bb_magic, ARCH_CONVERT) == XFS_BMAP_MAGIC)) + cmn_err(CE_NOTE, + "bb_magic 0x%x", + INT_GET(block->bb_magic, ARCH_CONVERT)); + if (!(INT_GET(block->bb_level, ARCH_CONVERT) == level)) + cmn_err(CE_NOTE, + "bb_level %d", + INT_GET(block->bb_level, ARCH_CONVERT)); + if (!(INT_GET(block->bb_numrecs, ARCH_CONVERT) > 0)) + cmn_err(CE_NOTE, + "bb_numrecs %d", + INT_GET(block->bb_numrecs, ARCH_CONVERT)); + if (!(INT_GET(block->bb_numrecs, ARCH_CONVERT) <= (mp)->m_bmap_dmxr[(level) != 0])) + cmn_err(CE_NOTE, + "bb_numrecs %d < m_bmap_dmxr[] %d", + INT_GET(block->bb_numrecs, ARCH_CONVERT), + (mp)->m_bmap_dmxr[(level) != 0]); + error = XFS_ERROR(EFSCORRUPTED); + goto error0; + } +#endif /* * Read-ahead the next leaf block, if any. */ @@ -3591,8 +3638,14 @@ xfs_bmapi( XFS_ATTR_FORK : XFS_DATA_FORK; if (XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_EXTENTS && XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE && - XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_LOCAL) + XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_LOCAL) { +#ifdef __KERNEL__ /* additional, temporary, debugging code */ + cmn_err(CE_NOTE, + "EFSCORRUPTED returned from file %s line %d", + __FILE__, __LINE__); +#endif return XFS_ERROR(EFSCORRUPTED); + } mp = ip->i_mount; if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); @@ -4077,8 +4130,14 @@ xfs_bmapi_single( ifp = XFS_IFORK_PTR(ip, whichfork); if (XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE && - XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_EXTENTS) + XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_EXTENTS) { +#ifdef __KERNEL__ /* additional, temporary, debugging code */ + cmn_err(CE_NOTE, + "EFSCORRUPTED returned from file %s line %d", + __FILE__, __LINE__); +#endif return XFS_ERROR(EFSCORRUPTED); + } if (XFS_FORCED_SHUTDOWN(ip->i_mount)) return XFS_ERROR(EIO); XFS_STATS_INC(xfsstats.xs_blk_mapr); @@ -4149,8 +4208,14 @@ xfs_bunmapi( XFS_ATTR_FORK : XFS_DATA_FORK; ifp = XFS_IFORK_PTR(ip, whichfork); if (XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_EXTENTS && - XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE) + XFS_IFORK_FORMAT(ip, whichfork) != XFS_DINODE_FMT_BTREE) { +#ifdef __KERNEL__ /* additional, temporary, debugging code */ + cmn_err(CE_NOTE, + "EFSCORRUPTED returned from file %s line %d", + __FILE__, __LINE__); +#endif return XFS_ERROR(EFSCORRUPTED); + } mp = ip->i_mount; if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); diff --git a/libxfs/xfs_btree.c b/libxfs/xfs_btree.c index d3a1b707d..863533482 100644 --- a/libxfs/xfs_btree.c +++ b/libxfs/xfs_btree.c @@ -194,6 +194,11 @@ xfs_btree_check_lblock( XFS_RANDOM_BTREE_CHECK_LBLOCK)) { if (bp) xfs_buftrace("LBTREE ERROR", bp); +#ifdef __KERNEL__ /* additional, temporary, debugging code */ + cmn_err(CE_NOTE, + "EFSCORRUPTED returned from file %s line %d", + __FILE__, __LINE__); +#endif return XFS_ERROR(EFSCORRUPTED); } return 0; @@ -312,6 +317,17 @@ xfs_btree_check_sblock( XFS_RANDOM_BTREE_CHECK_SBLOCK)) { if (bp) xfs_buftrace("SBTREE ERROR", bp); +#ifdef __KERNEL__ /* additional, temporary, debugging code */ + cmn_err(CE_NOTE, + "xfs_btree_check_sblock: Not OK:"); + cmn_err(CE_NOTE, + "magic 0x%x level %d numrecs %d leftsib %d rightsib %d", + INT_GET(block->bb_magic, ARCH_CONVERT), + INT_GET(block->bb_level, ARCH_CONVERT), + INT_GET(block->bb_numrecs, ARCH_CONVERT), + INT_GET(block->bb_leftsib, ARCH_CONVERT), + INT_GET(block->bb_rightsib, ARCH_CONVERT)); +#endif return XFS_ERROR(EFSCORRUPTED); } return 0; diff --git a/libxfs/xfs_ialloc.c b/libxfs/xfs_ialloc.c index 55a4ee448..8d6ef493d 100644 --- a/libxfs/xfs_ialloc.c +++ b/libxfs/xfs_ialloc.c @@ -1089,6 +1089,11 @@ xfs_ialloc_read_agi( if (XFS_TEST_ERROR(!agi_ok, mp, XFS_ERRTAG_IALLOC_READ_AGI, XFS_RANDOM_IALLOC_READ_AGI)) { xfs_trans_brelse(tp, bp); +#ifdef __KERNEL__ /* additional, temporary, debugging code */ + cmn_err(CE_NOTE, + "EFSCORRUPTED returned from file %s line %d", + __FILE__, __LINE__); +#endif return XFS_ERROR(EFSCORRUPTED); } pag = &mp->m_perag[agno];