drbd: use bitmap_weight()
Subsystems (2)
PATCH 1/1 drbd: use bitmap_weight()
Use bitmap_weight to count the total number of bits set in bitmap. This change just simplifies the code a bit.
Signed-off-by Akinobu Mita <[email protected]>
Cc Philipp Reisner <[email protected]>
Cc Lars Ellenberg <[email protected]>
--- drivers/block/drbd/drbd_bitmap.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-)
drivers/block/drbd/drbd_bitmap.c +5 -8
@@ -24,7 +24,7 @@#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/bitops.h> +#include <linux/bitmap.h> #include <linux/vmalloc.h> #include <linux/string.h> #include <linux/drbd.h>
@@ -559,21 +559,19 @@ static unsigned long bm_count_bits(struct drbd_bitmap *b)unsigned long *p_addr;unsigned long bits =0 ;unsigned long mask = (1UL << (b->bm_bits &BITS_PER_LONG_MASK )) -1 ; -int idx, i, last_word; +int idx, last_word;/* all but last page */ for (idx =0 ; idx < b->bm_number_of_pages -1 ; idx++) { p_addr =__bm_map_pidx (b, idx); -for (i =0 ; i <LWPP ; i++) - bits +=hweight_long (p_addr[i]); + bits +=bitmap_weight (p_addr,PAGE_SIZE *BITS_PER_BYTE );__bm_unmap (p_addr);cond_resched (); }/* last (or only) page */ last_word = ((b->bm_bits -1 ) &BITS_PER_PAGE_MASK ) >>LN2_BPL ; p_addr =__bm_map_pidx (b, idx); -for (i =0 ; i < last_word; i++) - bits +=hweight_long (p_addr[i]); + bits +=bitmap_weight (p_addr, last_word *BITS_PER_LONG ); p_addr[last_word] &=cpu_to_lel (mask); bits +=hweight_long (p_addr[last_word]);/* 32bit arch, may have an unused padding long */
@@ -1637,8 +1635,7 @@ int drbd_bm_e_weight(struct drbd_device *device, unsigned long enr)int n = e-s; p_addr =bm_map_pidx (b,bm_word_to_page_idx (b, s)); bm = p_addr +MLPP (s); -while (n--) - count +=hweight_long (*bm++); + count =bitmap_weight (bm, n *BITS_PER_LONG );bm_unmap (p_addr); }else {drbd_err (device,"start offset (%d) too large in drbd_bm_e_weight\n" , s);
Signature · 1 line
1.9.1