From a6913ea8529fb9dc7386ce5407027dc5745250eb Mon Sep 17 00:00:00 2001 From: ZhengLingyun Date: Mon, 8 Jul 2013 14:10:26 -0700 Subject: [PATCH] bitmap: Fix bitmap_allocate1() bug when n_bits is a multiple of 32. In function bitmap_allocate1(), the last "unsigned long" in bitmap was set to all 0-bits when (n_bits % BITMAP_ULONG_BITS == 0). This commit correctly sets it to all 1-bits. Signed-off-by: ZhengLingyun Signed-off-by: Ben Pfaff --- AUTHORS | 1 + lib/bitmap.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index 26e1f7ff9..eb9df6c00 100644 --- a/AUTHORS +++ b/AUTHORS @@ -95,6 +95,7 @@ Vivien Bernet-Rollande vbr@soprive.net Wei Yongjun yjwei@cn.fujitsu.com Yasuhito Takamiya yasuhito@gmail.com Yu Zhiguo yuzg@cn.fujitsu.com +ZhengLingyun konghuarukhr@163.com Zoltan Kiss zoltan.kiss@citrix.com Zhi Yong Wu zwu.kernel@gmail.com Zang MingJie zealot0630@gmail.com diff --git a/lib/bitmap.c b/lib/bitmap.c index d607526d5..ac568e97b 100644 --- a/lib/bitmap.c +++ b/lib/bitmap.c @@ -24,6 +24,7 @@ bitmap_allocate1(size_t n_bits) { size_t n_bytes = bitmap_n_bytes(n_bits); size_t n_longs = bitmap_n_longs(n_bits); + size_t r_bits = n_bits % BITMAP_ULONG_BITS; unsigned long *bitmap; /* Allocate and initialize most of the bitmap. */ @@ -32,7 +33,9 @@ bitmap_allocate1(size_t n_bits) /* Ensure that the last "unsigned long" in the bitmap only has as many * 1-bits as there actually should be. */ - bitmap[n_longs - 1] = (1UL << (n_bits % BITMAP_ULONG_BITS)) - 1; + if (r_bits) { + bitmap[n_longs - 1] = (1UL << r_bits) - 1; + } return bitmap; } -- 2.43.0