Skip to content

Commit d837f72

Browse files
zhaohemliu-song-6
authored andcommitted
md/bitmap: md_bitmap_get_counter returns wrong blocks
md_bitmap_get_counter() has code: ``` if (bitmap->bp[page].hijacked || bitmap->bp[page].map == NULL) csize = ((sector_t)1) << (bitmap->chunkshift + PAGE_COUNTER_SHIFT - 1); ``` The minus 1 is wrong, this branch should report 2048 bits of space. With "-1" action, this only report 1024 bit of space. This bug code returns wrong blocks, but it doesn't inflence bitmap logic: 1. Most callers focus this function return value (the counter of offset), not the parameter blocks. 2. The bug is only triggered when hijacked is true or map is NULL. the hijacked true condition is very rare. the "map == null" only true when array is creating or resizing. 3. Even the caller gets wrong blocks, current code makes caller just to call md_bitmap_get_counter() one more time. Signed-off-by: Zhao Heming <heming.zhao@suse.com> Signed-off-by: Song Liu <songliubraving@fb.com>
1 parent a913096 commit d837f72

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

drivers/md/md-bitmap.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1368,7 +1368,7 @@ __acquires(bitmap->lock)
13681368
if (bitmap->bp[page].hijacked ||
13691369
bitmap->bp[page].map == NULL)
13701370
csize = ((sector_t)1) << (bitmap->chunkshift +
1371-
PAGE_COUNTER_SHIFT - 1);
1371+
PAGE_COUNTER_SHIFT);
13721372
else
13731373
csize = ((sector_t)1) << bitmap->chunkshift;
13741374
*blocks = csize - (offset & (csize - 1));

0 commit comments

Comments
 (0)