agb_bitmap.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * Copyright (C) 2018-2023 Oracle. All Rights Reserved.
  4. * Author: Darrick J. Wong <djwong@kernel.org>
  5. */
  6. #ifndef __XFS_SCRUB_AGB_BITMAP_H__
  7. #define __XFS_SCRUB_AGB_BITMAP_H__
  8. /* Bitmaps, but for type-checked for xfs_agblock_t */
  9. struct xagb_bitmap {
  10. struct xbitmap32 agbitmap;
  11. };
  12. static inline void xagb_bitmap_init(struct xagb_bitmap *bitmap)
  13. {
  14. xbitmap32_init(&bitmap->agbitmap);
  15. }
  16. static inline void xagb_bitmap_destroy(struct xagb_bitmap *bitmap)
  17. {
  18. xbitmap32_destroy(&bitmap->agbitmap);
  19. }
  20. static inline int xagb_bitmap_clear(struct xagb_bitmap *bitmap,
  21. xfs_agblock_t start, xfs_extlen_t len)
  22. {
  23. return xbitmap32_clear(&bitmap->agbitmap, start, len);
  24. }
  25. static inline int xagb_bitmap_set(struct xagb_bitmap *bitmap,
  26. xfs_agblock_t start, xfs_extlen_t len)
  27. {
  28. return xbitmap32_set(&bitmap->agbitmap, start, len);
  29. }
  30. static inline bool xagb_bitmap_test(struct xagb_bitmap *bitmap,
  31. xfs_agblock_t start, xfs_extlen_t *len)
  32. {
  33. return xbitmap32_test(&bitmap->agbitmap, start, len);
  34. }
  35. static inline int xagb_bitmap_disunion(struct xagb_bitmap *bitmap,
  36. struct xagb_bitmap *sub)
  37. {
  38. return xbitmap32_disunion(&bitmap->agbitmap, &sub->agbitmap);
  39. }
  40. static inline uint32_t xagb_bitmap_hweight(struct xagb_bitmap *bitmap)
  41. {
  42. return xbitmap32_hweight(&bitmap->agbitmap);
  43. }
  44. static inline bool xagb_bitmap_empty(struct xagb_bitmap *bitmap)
  45. {
  46. return xbitmap32_empty(&bitmap->agbitmap);
  47. }
  48. static inline int xagb_bitmap_walk(struct xagb_bitmap *bitmap,
  49. xbitmap32_walk_fn fn, void *priv)
  50. {
  51. return xbitmap32_walk(&bitmap->agbitmap, fn, priv);
  52. }
  53. int xagb_bitmap_set_btblocks(struct xagb_bitmap *bitmap,
  54. struct xfs_btree_cur *cur);
  55. int xagb_bitmap_set_btcur_path(struct xagb_bitmap *bitmap,
  56. struct xfs_btree_cur *cur);
  57. static inline uint32_t xagb_bitmap_count_set_regions(struct xagb_bitmap *b)
  58. {
  59. return xbitmap32_count_set_regions(&b->agbitmap);
  60. }
  61. #endif /* __XFS_SCRUB_AGB_BITMAP_H__ */