xfs: replace open-coded bitmap weight logic
Add a xbitmap_hweight helper function so that we can get rid of the open-coded loop. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Brian Foster <bfoster@redhat.com>
This commit is contained in:
parent
00b10d487b
commit
608eb3cee7
|
@ -482,8 +482,6 @@ xrep_agfl_collect_blocks(
|
|||
struct xrep_agfl ra;
|
||||
struct xfs_mount *mp = sc->mp;
|
||||
struct xfs_btree_cur *cur;
|
||||
struct xbitmap_range *br;
|
||||
struct xbitmap_range *n;
|
||||
int error;
|
||||
|
||||
ra.sc = sc;
|
||||
|
@ -527,14 +525,8 @@ xrep_agfl_collect_blocks(
|
|||
* Calculate the new AGFL size. If we found more blocks than fit in
|
||||
* the AGFL we'll free them later.
|
||||
*/
|
||||
*flcount = 0;
|
||||
for_each_xbitmap_extent(br, n, agfl_extents) {
|
||||
*flcount += br->len;
|
||||
if (*flcount > xfs_agfl_size(mp))
|
||||
break;
|
||||
}
|
||||
if (*flcount > xfs_agfl_size(mp))
|
||||
*flcount = xfs_agfl_size(mp);
|
||||
*flcount = min_t(uint64_t, xbitmap_hweight(agfl_extents),
|
||||
xfs_agfl_size(mp));
|
||||
return 0;
|
||||
|
||||
err:
|
||||
|
|
|
@ -297,3 +297,18 @@ xbitmap_set_btblocks(
|
|||
return xfs_btree_visit_blocks(cur, xbitmap_collect_btblock,
|
||||
XFS_BTREE_VISIT_ALL, bitmap);
|
||||
}
|
||||
|
||||
/* How many bits are set in this bitmap? */
|
||||
uint64_t
|
||||
xbitmap_hweight(
|
||||
struct xbitmap *bitmap)
|
||||
{
|
||||
struct xbitmap_range *bmr;
|
||||
struct xbitmap_range *n;
|
||||
uint64_t ret = 0;
|
||||
|
||||
for_each_xbitmap_extent(bmr, n, bitmap)
|
||||
ret += bmr->len;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -32,5 +32,6 @@ int xbitmap_set_btcur_path(struct xbitmap *bitmap,
|
|||
struct xfs_btree_cur *cur);
|
||||
int xbitmap_set_btblocks(struct xbitmap *bitmap,
|
||||
struct xfs_btree_cur *cur);
|
||||
uint64_t xbitmap_hweight(struct xbitmap *bitmap);
|
||||
|
||||
#endif /* __XFS_SCRUB_BITMAP_H__ */
|
||||
|
|
Loading…
Reference in New Issue
Block a user