1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2018-2023 Oracle. All Rights Reserved.
4 * Author: Darrick J. Wong <djwong@kernel.org>
6 #ifndef __XFS_SCRUB_AGB_BITMAP_H__
7 #define __XFS_SCRUB_AGB_BITMAP_H__
9 /* Bitmaps, but for type-checked for xfs_agblock_t */
12 struct xbitmap32 agbitmap
;
15 static inline void xagb_bitmap_init(struct xagb_bitmap
*bitmap
)
17 xbitmap32_init(&bitmap
->agbitmap
);
20 static inline void xagb_bitmap_destroy(struct xagb_bitmap
*bitmap
)
22 xbitmap32_destroy(&bitmap
->agbitmap
);
25 static inline int xagb_bitmap_clear(struct xagb_bitmap
*bitmap
,
26 xfs_agblock_t start
, xfs_extlen_t len
)
28 return xbitmap32_clear(&bitmap
->agbitmap
, start
, len
);
30 static inline int xagb_bitmap_set(struct xagb_bitmap
*bitmap
,
31 xfs_agblock_t start
, xfs_extlen_t len
)
33 return xbitmap32_set(&bitmap
->agbitmap
, start
, len
);
36 static inline bool xagb_bitmap_test(struct xagb_bitmap
*bitmap
,
37 xfs_agblock_t start
, xfs_extlen_t
*len
)
39 return xbitmap32_test(&bitmap
->agbitmap
, start
, len
);
42 static inline int xagb_bitmap_disunion(struct xagb_bitmap
*bitmap
,
43 struct xagb_bitmap
*sub
)
45 return xbitmap32_disunion(&bitmap
->agbitmap
, &sub
->agbitmap
);
48 static inline uint32_t xagb_bitmap_hweight(struct xagb_bitmap
*bitmap
)
50 return xbitmap32_hweight(&bitmap
->agbitmap
);
52 static inline bool xagb_bitmap_empty(struct xagb_bitmap
*bitmap
)
54 return xbitmap32_empty(&bitmap
->agbitmap
);
57 static inline int xagb_bitmap_walk(struct xagb_bitmap
*bitmap
,
58 xbitmap32_walk_fn fn
, void *priv
)
60 return xbitmap32_walk(&bitmap
->agbitmap
, fn
, priv
);
63 int xagb_bitmap_set_btblocks(struct xagb_bitmap
*bitmap
,
64 struct xfs_btree_cur
*cur
);
65 int xagb_bitmap_set_btcur_path(struct xagb_bitmap
*bitmap
,
66 struct xfs_btree_cur
*cur
);
68 static inline uint32_t xagb_bitmap_count_set_regions(struct xagb_bitmap
*b
)
70 return xbitmap32_count_set_regions(&b
->agbitmap
);
73 #endif /* __XFS_SCRUB_AGB_BITMAP_H__ */