diff options
-rw-r--r-- | fs/xfs/xfs_bmap_util.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c index 863180c41858..424e3bd12700 100644 --- a/fs/xfs/xfs_bmap_util.c +++ b/fs/xfs/xfs_bmap_util.c | |||
@@ -219,20 +219,22 @@ xfs_bmap_eof( | |||
219 | */ | 219 | */ |
220 | 220 | ||
221 | /* | 221 | /* |
222 | * Count leaf blocks given a range of extent records. | 222 | * Count leaf blocks given a range of extent records. Delayed allocation |
223 | * extents are not counted towards the totals. | ||
223 | */ | 224 | */ |
224 | STATIC void | 225 | STATIC void |
225 | xfs_bmap_count_leaves( | 226 | xfs_bmap_count_leaves( |
226 | xfs_ifork_t *ifp, | 227 | struct xfs_ifork *ifp, |
227 | xfs_extnum_t idx, | ||
228 | int numrecs, | ||
229 | int *count) | 228 | int *count) |
230 | { | 229 | { |
231 | int b; | 230 | xfs_extnum_t i; |
231 | xfs_extnum_t nr_exts = xfs_iext_count(ifp); | ||
232 | 232 | ||
233 | for (b = 0; b < numrecs; b++) { | 233 | for (i = 0; i < nr_exts; i++) { |
234 | xfs_bmbt_rec_host_t *frp = xfs_iext_get_ext(ifp, idx + b); | 234 | xfs_bmbt_rec_host_t *frp = xfs_iext_get_ext(ifp, i); |
235 | *count += xfs_bmbt_get_blockcount(frp); | 235 | if (!isnullstartblock(xfs_bmbt_get_startblock(frp))) { |
236 | *count += xfs_bmbt_get_blockcount(frp); | ||
237 | } | ||
236 | } | 238 | } |
237 | } | 239 | } |
238 | 240 | ||
@@ -334,7 +336,8 @@ xfs_bmap_count_tree( | |||
334 | } | 336 | } |
335 | 337 | ||
336 | /* | 338 | /* |
337 | * Count fsblocks of the given fork. | 339 | * Count fsblocks of the given fork. Delayed allocation extents are |
340 | * not counted towards the totals. | ||
338 | */ | 341 | */ |
339 | static int /* error */ | 342 | static int /* error */ |
340 | xfs_bmap_count_blocks( | 343 | xfs_bmap_count_blocks( |
@@ -354,7 +357,7 @@ xfs_bmap_count_blocks( | |||
354 | mp = ip->i_mount; | 357 | mp = ip->i_mount; |
355 | ifp = XFS_IFORK_PTR(ip, whichfork); | 358 | ifp = XFS_IFORK_PTR(ip, whichfork); |
356 | if ( XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS ) { | 359 | if ( XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS ) { |
357 | xfs_bmap_count_leaves(ifp, 0, xfs_iext_count(ifp), count); | 360 | xfs_bmap_count_leaves(ifp, count); |
358 | return 0; | 361 | return 0; |
359 | } | 362 | } |
360 | 363 | ||