Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 91e11088 authored by Yingping Lu's avatar Yingping Lu Committed by Nathan Scott
Browse files

[XFS] Fixing size report discrepancy between ls and du caused by xfs_fsr



SGI-PV: 943908
SGI-Modid: xfs-linux:xfs-kern:200874a

Signed-off-by: default avatarYingping Lu <yingping@sgi.com>
Signed-off-by: default avatarNathan Scott <nathans@sgi.com>
parent 9af0a70c
Loading
Loading
Loading
Loading
+23 −1
Original line number Diff line number Diff line
@@ -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;