[XFS] Fixing size report discrepancy between ls and du caused by xfs_fsr
authorYingping Lu <yingping@sgi.com>
Wed, 2 Nov 2005 04:10:24 +0000 (15:10 +1100)
committerNathan Scott <nathans@sgi.com>
Wed, 2 Nov 2005 04:10:24 +0000 (15:10 +1100)
SGI-PV: 943908
SGI-Modid: xfs-linux:xfs-kern:200874a

Signed-off-by: Yingping Lu <yingping@sgi.com>
Signed-off-by: Nathan Scott <nathans@sgi.com>
fs/xfs/xfs_bmap.c

index e52387b3abef805f6f2879f287240d5f607724f8..9f635f0ccf080ae2ca209643f4d9ebeb905899d7 100644 (file)
@@ -423,6 +423,12 @@ xfs_bmap_count_leaves(
        int                     numrecs,
        int                     *count);
 
+STATIC int
+xfs_bmap_disk_count_leaves(
+       xfs_bmbt_rec_t          *frp,
+       int                     numrecs,
+       int                     *count);
+
 /*
  * Bmap internal routines.
  */
@@ -6282,7 +6288,7 @@ xfs_bmap_count_tree(
                        numrecs = INT_GET(block->bb_numrecs, ARCH_CONVERT);
                        frp = XFS_BTREE_REC_ADDR(mp->m_sb.sb_blocksize,
                                xfs_bmbt, block, 1, mp->m_bmap_dmxr[0]);
-                       if (unlikely(xfs_bmap_count_leaves(frp, numrecs, count) < 0)) {
+                       if (unlikely(xfs_bmap_disk_count_leaves(frp, numrecs, count) < 0)) {
                                xfs_trans_brelse(tp, bp);
                                XFS_ERROR_REPORT("xfs_bmap_count_tree(2)",
                                                 XFS_ERRLEVEL_LOW, mp);
@@ -6313,6 +6319,22 @@ xfs_bmap_count_leaves(
 {
        int             b;
 
+       for ( b = 1; b <= numrecs; b++, frp++)
+               *count += xfs_bmbt_get_blockcount(frp);
+       return 0;
+}
+
+/*
+ * Count leaf blocks given a pointer to an extent list originally in btree format.
+ */
+int
+xfs_bmap_disk_count_leaves(
+       xfs_bmbt_rec_t          *frp,
+       int                     numrecs,
+       int                     *count)
+{
+       int             b;
+
        for ( b = 1; b <= numrecs; b++, frp++)
                *count += xfs_bmbt_disk_get_blockcount(frp);
        return 0;