[PATCH 06/43] libfrog: add bitmap_clear

Darrick J. Wong
2024-10-11T01:26:08Z

Uncomment and fix bitmap_clear so that xfs_repair can start using it.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
[hch: split from a larger patch]
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
libfrog/bitmap.c | 25 +++++++++++++++++++------
libfrog/bitmap.h | 1 +
2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/libfrog/bitmap.c b/libfrog/bitmap.c
index 5af5ab8dd6b3bb..0308886d446ff2 100644
--- a/libfrog/bitmap.c
+++ b/libfrog/bitmap.c
@@ -233,10 +233,9 @@ bitmap_set(
return res;
}

-#if 0 /* Unused, provided for completeness. */
/* Clear a region of bits. */
-int
-bitmap_clear(
+static int
+__bitmap_clear(
struct bitmap *bmap,
uint64_t start,
uint64_t len)
@@ -251,8 +250,8 @@ bitmap_clear(
uint64_t new_length;
struct avl64node *node;
int stat;
+ int ret = 0;

- pthread_mutex_lock(&bmap->bt_lock);
/* Find any existing nodes over that range. */
avl64_findranges(bmap->bt_tree, start, start + len, &firstn, &lastn);

@@ -312,10 +311,24 @@ bitmap_clear(
}

out:
- pthread_mutex_unlock(&bmap->bt_lock);
return ret;
}
-#endif
+
+/* Clear a region of bits. */
+int
+bitmap_clear(
+ struct bitmap *bmap,
+ uint64_t start,
+ uint64_t length)
+{
+ int res;
+
+ pthread_mutex_lock(&bmap->bt_lock);
+ res = __bitmap_clear(bmap, start, length);
+ pthread_mutex_unlock(&bmap->bt_lock);
+
+ return res;
+}

/* Iterate the set regions of this bitmap. */
int
diff --git a/libfrog/bitmap.h b/libfrog/bitmap.h
index 043b77eece65b3..47df0ad38467ce 100644
--- a/libfrog/bitmap.h
+++ b/libfrog/bitmap.h
@@ -14,6 +14,7 @@ struct bitmap {
int bitmap_alloc(struct bitmap **bmap);
void bitmap_free(struct bitmap **bmap);
int bitmap_set(struct bitmap *bmap, uint64_t start, uint64_t length);
+int bitmap_clear(struct bitmap *bmap, uint64_t start, uint64_t length);
int bitmap_iterate(struct bitmap *bmap, int (*fn)(uint64_t, uint64_t, void *),
void *arg);
int bitmap_iterate_range(struct bitmap *bmap, uint64_t start, uint64_t length,