xfs: rewrite xfs_bmap_count_leaves using xfs_iext_get_extent
authorChristoph Hellwig <hch@lst.de>
Tue, 29 Aug 2017 22:44:14 +0000 (15:44 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Fri, 1 Sep 2017 20:08:26 +0000 (13:08 -0700)
This avoids poking into the internals of the extent list.  Also return
the number of extents as the return value instead of an additional
by reference argument, and make it available to callers outside of
xfs_bmap_util.c

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
fs/xfs/xfs_bmap_util.c
fs/xfs/xfs_bmap_util.h

index 8661be0aacaae27f6fab15383161bbdeb6ed9678..cd9a5400ba4fef2a75d5c24f3f626f5ad0211fae 100644 (file)
@@ -222,22 +222,21 @@ xfs_bmap_eof(
  * Count leaf blocks given a range of extent records.  Delayed allocation
  * extents are not counted towards the totals.
  */
-STATIC void
+xfs_extnum_t
 xfs_bmap_count_leaves(
        struct xfs_ifork        *ifp,
-       xfs_extnum_t            *numrecs,
        xfs_filblks_t           *count)
 {
-       xfs_extnum_t            i;
-       xfs_extnum_t            nr_exts = xfs_iext_count(ifp);
-
-       for (i = 0; i < nr_exts; i++) {
-               xfs_bmbt_rec_host_t *frp = xfs_iext_get_ext(ifp, i);
-               if (!isnullstartblock(xfs_bmbt_get_startblock(frp))) {
-                       (*numrecs)++;
-                       *count += xfs_bmbt_get_blockcount(frp);
+       struct xfs_bmbt_irec    got;
+       xfs_extnum_t            numrecs = 0, i = 0;
+
+       while (xfs_iext_get_extent(ifp, i++, &got)) {
+               if (!isnullstartblock(got.br_startblock)) {
+                       *count += got.br_blockcount;
+                       numrecs++;
                }
        }
+       return numrecs;
 }
 
 /*
@@ -370,7 +369,7 @@ xfs_bmap_count_blocks(
 
        switch (XFS_IFORK_FORMAT(ip, whichfork)) {
        case XFS_DINODE_FMT_EXTENTS:
-               xfs_bmap_count_leaves(ifp, nextents, count);
+               *nextents = xfs_bmap_count_leaves(ifp, count);
                return 0;
        case XFS_DINODE_FMT_BTREE:
                if (!(ifp->if_flags & XFS_IFEXTENTS)) {
index 0cede104357170425e1864d63cc934596977a166..0eaa81dc49be674137cda51a3364b54721c10d58 100644 (file)
@@ -70,6 +70,7 @@ int   xfs_swap_extents(struct xfs_inode *ip, struct xfs_inode *tip,
 
 xfs_daddr_t xfs_fsb_to_db(struct xfs_inode *ip, xfs_fsblock_t fsb);
 
+xfs_extnum_t xfs_bmap_count_leaves(struct xfs_ifork *ifp, xfs_filblks_t *count);
 int xfs_bmap_count_blocks(struct xfs_trans *tp, struct xfs_inode *ip,
                          int whichfork, xfs_extnum_t *nextents,
                          xfs_filblks_t *count);