[PATCH 2/3] xfs: drop the _safe behavior from the xbitmap foreach macro

Darrick J. Wong
2022-12-30T22:51:42Z

It's not safe to edit bitmap intervals while we're iterating them with
for_each_xbitmap_extent. None of the existing callers actually need
that ability anyway, so drop the safe variable.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
fs/xfs/scrub/bitmap.c | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/fs/xfs/scrub/bitmap.c b/fs/xfs/scrub/bitmap.c
index d32ded56da90..f8ebc4d61462 100644
--- a/fs/xfs/scrub/bitmap.c
+++ b/fs/xfs/scrub/bitmap.c
@@ -13,8 +13,9 @@
#include "scrub/scrub.h"
#include "scrub/bitmap.h"

-#define for_each_xbitmap_extent(bex, n, bitmap) \
- list_for_each_entry_safe((bex), (n), &(bitmap)->list, list)
+/* Iterate each interval of a bitmap. Do not change the bitmap. */
+#define for_each_xbitmap_extent(bex, bitmap) \
+ list_for_each_entry((bex), &(bitmap)->list, list)

/*
* Set a range of this bitmap. Caller must ensure the range is not set.
@@ -46,10 +47,9 @@ void
xbitmap_destroy(
struct xbitmap *bitmap)
{
- struct xbitmap_range *bmr;
- struct xbitmap_range *n;
+ struct xbitmap_range *bmr, *n;

- for_each_xbitmap_extent(bmr, n, bitmap) {
+ list_for_each_entry_safe(bmr, n, &bitmap->list, list) {
list_del(&bmr->list);
kfree(bmr);
}
@@ -308,10 +308,9 @@ xbitmap_hweight(
struct xbitmap *bitmap)
{
struct xbitmap_range *bmr;
- struct xbitmap_range *n;
uint64_t ret = 0;

- for_each_xbitmap_extent(bmr, n, bitmap)
+ for_each_xbitmap_extent(bmr, bitmap)
ret += bmr->len;

return ret;
@@ -324,10 +323,10 @@ xbitmap_walk(
xbitmap_walk_fn fn,
void *priv)
{
- struct xbitmap_range *bex, *n;
+ struct xbitmap_range *bex;
int error = 0;

- for_each_xbitmap_extent(bex, n, bitmap) {
+ for_each_xbitmap_extent(bex, bitmap) {
error = fn(bex->start, bex->len, priv);
if (error)
break;