forked from Minki/linux
xfs: rewrite xfs_bmap_count_leaves using xfs_iext_get_extent
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>
This commit is contained in:
parent
4c35445b59
commit
e17a5c6f0e
@ -222,22 +222,21 @@ xfs_bmap_eof(
|
|||||||
* Count leaf blocks given a range of extent records. Delayed allocation
|
* Count leaf blocks given a range of extent records. Delayed allocation
|
||||||
* extents are not counted towards the totals.
|
* extents are not counted towards the totals.
|
||||||
*/
|
*/
|
||||||
STATIC void
|
xfs_extnum_t
|
||||||
xfs_bmap_count_leaves(
|
xfs_bmap_count_leaves(
|
||||||
struct xfs_ifork *ifp,
|
struct xfs_ifork *ifp,
|
||||||
xfs_extnum_t *numrecs,
|
|
||||||
xfs_filblks_t *count)
|
xfs_filblks_t *count)
|
||||||
{
|
{
|
||||||
xfs_extnum_t i;
|
struct xfs_bmbt_irec got;
|
||||||
xfs_extnum_t nr_exts = xfs_iext_count(ifp);
|
xfs_extnum_t numrecs = 0, i = 0;
|
||||||
|
|
||||||
for (i = 0; i < nr_exts; i++) {
|
while (xfs_iext_get_extent(ifp, i++, &got)) {
|
||||||
xfs_bmbt_rec_host_t *frp = xfs_iext_get_ext(ifp, i);
|
if (!isnullstartblock(got.br_startblock)) {
|
||||||
if (!isnullstartblock(xfs_bmbt_get_startblock(frp))) {
|
*count += got.br_blockcount;
|
||||||
(*numrecs)++;
|
numrecs++;
|
||||||
*count += xfs_bmbt_get_blockcount(frp);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return numrecs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -370,7 +369,7 @@ xfs_bmap_count_blocks(
|
|||||||
|
|
||||||
switch (XFS_IFORK_FORMAT(ip, whichfork)) {
|
switch (XFS_IFORK_FORMAT(ip, whichfork)) {
|
||||||
case XFS_DINODE_FMT_EXTENTS:
|
case XFS_DINODE_FMT_EXTENTS:
|
||||||
xfs_bmap_count_leaves(ifp, nextents, count);
|
*nextents = xfs_bmap_count_leaves(ifp, count);
|
||||||
return 0;
|
return 0;
|
||||||
case XFS_DINODE_FMT_BTREE:
|
case XFS_DINODE_FMT_BTREE:
|
||||||
if (!(ifp->if_flags & XFS_IFEXTENTS)) {
|
if (!(ifp->if_flags & XFS_IFEXTENTS)) {
|
||||||
|
@ -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_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 xfs_bmap_count_blocks(struct xfs_trans *tp, struct xfs_inode *ip,
|
||||||
int whichfork, xfs_extnum_t *nextents,
|
int whichfork, xfs_extnum_t *nextents,
|
||||||
xfs_filblks_t *count);
|
xfs_filblks_t *count);
|
||||||
|
Loading…
Reference in New Issue
Block a user