]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
sync userpsace with recent XFS kernel changes - this does not affect
authorNathan Scott <nathans@sgi.com>
Tue, 23 Oct 2001 23:44:04 +0000 (23:44 +0000)
committerNathan Scott <nathans@sgi.com>
Tue, 23 Oct 2001 23:44:04 +0000 (23:44 +0000)
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.

doc/CHANGES
include/xfs_quota.h
libxfs/xfs_alloc.c
libxfs/xfs_bmap.c
libxfs/xfs_btree.c
libxfs/xfs_ialloc.c

index cce19dde7e21ab84533e06ac12f261f24003814d..2eb1b61f33102f21cc18e82e8ccd5baf13ed3028 100644 (file)
@@ -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
index a86651c4ab29a9018a29bfb680d716f85b94bd49..001188269a7526ee80dd3e045ea60c735f884b93 100644 (file)
@@ -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)
 
index 7bae28a438eed86057767d8139b1a2bf7ccea36d..8786269bd1609a512c586dd5efba9348e18ec805 100644 (file)
@@ -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];
index 1e68e0407c34522b291c635d5ccf88d6e6e84090..0b1c203231a80520b4559eef09b01c19c37c1533 100644 (file)
@@ -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);
index d3a1b707dba437f7c888fc1173f516997d5273ce..86353348232c397f35560a099329766401130f12 100644 (file)
@@ -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;
index 55a4ee4483c43e2272f15d93f66db2b99e734076..8d6ef493df0b070086fa54ccf930bf4224d6510e 100644 (file)
@@ -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];