[Ocfs2-tools-devel] [PATCH 09/20] libocfs2: Add functions to get the bit_set count.

Tao Ma tao.ma at oracle.com
Mon May 17 01:46:56 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