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;
         * 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:
 
        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;
+}
 
                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__ */