[Ocfs2-tools-devel] [PATCH 09/22] libocfs2: Add functions to get the bit_set count.
Tao Ma
tao.ma at oracle.com
Wed Mar 31 21:41:13 PDT 2010
As for discontiguous block group, we need to get
the total set_bits in a range of bitmap. So add
the function ocfs2_get_bits_set.
Signed-off-by: Tao Ma <tao.ma at oracle.com>
---
include/ocfs2/bitops.h | 1 +
libocfs2/bitops.c | 16 ++++++++++++++++
2 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/include/ocfs2/bitops.h b/include/ocfs2/bitops.h
index a12fe6b..9e9e733 100644
--- a/include/ocfs2/bitops.h
+++ b/include/ocfs2/bitops.h
@@ -38,5 +38,6 @@ extern int ocfs2_find_first_bit_set(void *addr, int size);
extern int ocfs2_find_first_bit_clear(void *addr, int size);
extern int ocfs2_find_next_bit_set(void *addr, int size, int offset);
extern int ocfs2_find_next_bit_clear(void *addr, int size, int offset);
+extern int ocfs2_get_bits_set(void *addr, int size, int offset);
#endif
diff --git a/libocfs2/bitops.c b/libocfs2/bitops.c
index df9cb9a..4bbaca0 100644
--- a/libocfs2/bitops.c
+++ b/libocfs2/bitops.c
@@ -161,6 +161,22 @@ int ocfs2_find_next_bit_clear(void *addr, int size, int offset)
return (res + d0 - 1);
}
+int ocfs2_get_bits_set(void *addr, int size, int offset)
+{
+ int set_bits = 0, found = 0;
+
+ while (1) {
+ found = ocfs2_find_next_bit_set(addr, size, offset);
+ if (found < size) {
+ set_bits++;
+ offset = found + 1;
+ } else
+ break;
+ }
+
+ return set_bits;
+}
+
#ifdef DEBUG_EXE
#include <stdio.h>
#include <stdlib.h>
--
1.5.5
More information about the Ocfs2-tools-devel
mailing list