|
@@ -1475,10 +1475,17 @@ void _drbd_bm_set_bits(struct drbd_conf *mdev, const unsigned long s, const unsi
|
|
|
first_word = 0;
|
|
|
spin_lock_irq(&b->bm_lock);
|
|
|
}
|
|
|
-
|
|
|
/* last page (respectively only page, for first page == last page) */
|
|
|
last_word = MLPP(el >> LN2_BPL);
|
|
|
- bm_set_full_words_within_one_page(mdev->bitmap, last_page, first_word, last_word);
|
|
|
+
|
|
|
+ /* consider bitmap->bm_bits = 32768, bitmap->bm_number_of_pages = 1. (or multiples).
|
|
|
+ * ==> e = 32767, el = 32768, last_page = 2,
|
|
|
+ * and now last_word = 0.
|
|
|
+ * We do not want to touch last_page in this case,
|
|
|
+ * as we did not allocate it, it is not present in bitmap->bm_pages.
|
|
|
+ */
|
|
|
+ if (last_word)
|
|
|
+ bm_set_full_words_within_one_page(mdev->bitmap, last_page, first_word, last_word);
|
|
|
|
|
|
/* possibly trailing bits.
|
|
|
* example: (e & 63) == 63, el will be e+1.
|