]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/block/drbd/drbd_bitmap.c
drbd: Broadcast sync progress no more often than once per second
[karo-tx-linux.git] / drivers / block / drbd / drbd_bitmap.c
1 /*
2    drbd_bitmap.c
3
4    This file is part of DRBD by Philipp Reisner and Lars Ellenberg.
5
6    Copyright (C) 2004-2008, LINBIT Information Technologies GmbH.
7    Copyright (C) 2004-2008, Philipp Reisner <philipp.reisner@linbit.com>.
8    Copyright (C) 2004-2008, Lars Ellenberg <lars.ellenberg@linbit.com>.
9
10    drbd is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 2, or (at your option)
13    any later version.
14
15    drbd is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with drbd; see the file COPYING.  If not, write to
22    the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
23  */
24
25 #include <linux/bitops.h>
26 #include <linux/vmalloc.h>
27 #include <linux/string.h>
28 #include <linux/drbd.h>
29 #include <linux/slab.h>
30 #include <asm/kmap_types.h>
31
32 #include "drbd_int.h"
33
34
35 /* OPAQUE outside this file!
36  * interface defined in drbd_int.h
37
38  * convention:
39  * function name drbd_bm_... => used elsewhere, "public".
40  * function name      bm_... => internal to implementation, "private".
41  */
42
43
44 /*
45  * LIMITATIONS:
46  * We want to support >= peta byte of backend storage, while for now still using
47  * a granularity of one bit per 4KiB of storage.
48  * 1 << 50              bytes backend storage (1 PiB)
49  * 1 << (50 - 12)       bits needed
50  *      38 --> we need u64 to index and count bits
51  * 1 << (38 - 3)        bitmap bytes needed
52  *      35 --> we still need u64 to index and count bytes
53  *                      (that's 32 GiB of bitmap for 1 PiB storage)
54  * 1 << (35 - 2)        32bit longs needed
55  *      33 --> we'd even need u64 to index and count 32bit long words.
56  * 1 << (35 - 3)        64bit longs needed
57  *      32 --> we could get away with a 32bit unsigned int to index and count
58  *      64bit long words, but I rather stay with unsigned long for now.
59  *      We probably should neither count nor point to bytes or long words
60  *      directly, but either by bitnumber, or by page index and offset.
61  * 1 << (35 - 12)
62  *      22 --> we need that much 4KiB pages of bitmap.
63  *      1 << (22 + 3) --> on a 64bit arch,
64  *      we need 32 MiB to store the array of page pointers.
65  *
66  * Because I'm lazy, and because the resulting patch was too large, too ugly
67  * and still incomplete, on 32bit we still "only" support 16 TiB (minus some),
68  * (1 << 32) bits * 4k storage.
69  *
70
71  * bitmap storage and IO:
72  *      Bitmap is stored little endian on disk, and is kept little endian in
73  *      core memory. Currently we still hold the full bitmap in core as long
74  *      as we are "attached" to a local disk, which at 32 GiB for 1PiB storage
75  *      seems excessive.
76  *
77  *      We plan to reduce the amount of in-core bitmap pages by paging them in
78  *      and out against their on-disk location as necessary, but need to make
79  *      sure we don't cause too much meta data IO, and must not deadlock in
80  *      tight memory situations. This needs some more work.
81  */
82
83 /*
84  * NOTE
85  *  Access to the *bm_pages is protected by bm_lock.
86  *  It is safe to read the other members within the lock.
87  *
88  *  drbd_bm_set_bits is called from bio_endio callbacks,
89  *  We may be called with irq already disabled,
90  *  so we need spin_lock_irqsave().
91  *  And we need the kmap_atomic.
92  */
93 struct drbd_bitmap {
94         struct page **bm_pages;
95         spinlock_t bm_lock;
96
97         /* see LIMITATIONS: above */
98
99         unsigned long bm_set;       /* nr of set bits; THINK maybe atomic_t? */
100         unsigned long bm_bits;
101         size_t   bm_words;
102         size_t   bm_number_of_pages;
103         sector_t bm_dev_capacity;
104         struct mutex bm_change; /* serializes resize operations */
105
106         wait_queue_head_t bm_io_wait; /* used to serialize IO of single pages */
107
108         enum bm_flag bm_flags;
109
110         /* debugging aid, in case we are still racy somewhere */
111         char          *bm_why;
112         struct task_struct *bm_task;
113 };
114
115 #define bm_print_lock_info(m) __bm_print_lock_info(m, __func__)
116 static void __bm_print_lock_info(struct drbd_conf *mdev, const char *func)
117 {
118         struct drbd_bitmap *b = mdev->bitmap;
119         if (!__ratelimit(&drbd_ratelimit_state))
120                 return;
121         dev_err(DEV, "FIXME %s in %s, bitmap locked for '%s' by %s\n",
122                 drbd_task_to_thread_name(mdev->tconn, current),
123                 func, b->bm_why ?: "?",
124                 drbd_task_to_thread_name(mdev->tconn, b->bm_task));
125 }
126
127 void drbd_bm_lock(struct drbd_conf *mdev, char *why, enum bm_flag flags)
128 {
129         struct drbd_bitmap *b = mdev->bitmap;
130         int trylock_failed;
131
132         if (!b) {
133                 dev_err(DEV, "FIXME no bitmap in drbd_bm_lock!?\n");
134                 return;
135         }
136
137         trylock_failed = !mutex_trylock(&b->bm_change);
138
139         if (trylock_failed) {
140                 dev_warn(DEV, "%s going to '%s' but bitmap already locked for '%s' by %s\n",
141                          drbd_task_to_thread_name(mdev->tconn, current),
142                          why, b->bm_why ?: "?",
143                          drbd_task_to_thread_name(mdev->tconn, b->bm_task));
144                 mutex_lock(&b->bm_change);
145         }
146         if (BM_LOCKED_MASK & b->bm_flags)
147                 dev_err(DEV, "FIXME bitmap already locked in bm_lock\n");
148         b->bm_flags |= flags & BM_LOCKED_MASK;
149
150         b->bm_why  = why;
151         b->bm_task = current;
152 }
153
154 void drbd_bm_unlock(struct drbd_conf *mdev)
155 {
156         struct drbd_bitmap *b = mdev->bitmap;
157         if (!b) {
158                 dev_err(DEV, "FIXME no bitmap in drbd_bm_unlock!?\n");
159                 return;
160         }
161
162         if (!(BM_LOCKED_MASK & mdev->bitmap->bm_flags))
163                 dev_err(DEV, "FIXME bitmap not locked in bm_unlock\n");
164
165         b->bm_flags &= ~BM_LOCKED_MASK;
166         b->bm_why  = NULL;
167         b->bm_task = NULL;
168         mutex_unlock(&b->bm_change);
169 }
170
171 /* we store some "meta" info about our pages in page->private */
172 /* at a granularity of 4k storage per bitmap bit:
173  * one peta byte storage: 1<<50 byte, 1<<38 * 4k storage blocks
174  *  1<<38 bits,
175  *  1<<23 4k bitmap pages.
176  * Use 24 bits as page index, covers 2 peta byte storage
177  * at a granularity of 4k per bit.
178  * Used to report the failed page idx on io error from the endio handlers.
179  */
180 #define BM_PAGE_IDX_MASK        ((1UL<<24)-1)
181 /* this page is currently read in, or written back */
182 #define BM_PAGE_IO_LOCK         31
183 /* if there has been an IO error for this page */
184 #define BM_PAGE_IO_ERROR        30
185 /* this is to be able to intelligently skip disk IO,
186  * set if bits have been set since last IO. */
187 #define BM_PAGE_NEED_WRITEOUT   29
188 /* to mark for lazy writeout once syncer cleared all clearable bits,
189  * we if bits have been cleared since last IO. */
190 #define BM_PAGE_LAZY_WRITEOUT   28
191 /* pages marked with this "HINT" will be considered for writeout
192  * on activity log transactions */
193 #define BM_PAGE_HINT_WRITEOUT   27
194
195 /* store_page_idx uses non-atomic assignment. It is only used directly after
196  * allocating the page.  All other bm_set_page_* and bm_clear_page_* need to
197  * use atomic bit manipulation, as set_out_of_sync (and therefore bitmap
198  * changes) may happen from various contexts, and wait_on_bit/wake_up_bit
199  * requires it all to be atomic as well. */
200 static void bm_store_page_idx(struct page *page, unsigned long idx)
201 {
202         BUG_ON(0 != (idx & ~BM_PAGE_IDX_MASK));
203         set_page_private(page, idx);
204 }
205
206 static unsigned long bm_page_to_idx(struct page *page)
207 {
208         return page_private(page) & BM_PAGE_IDX_MASK;
209 }
210
211 /* As is very unlikely that the same page is under IO from more than one
212  * context, we can get away with a bit per page and one wait queue per bitmap.
213  */
214 static void bm_page_lock_io(struct drbd_conf *mdev, int page_nr)
215 {
216         struct drbd_bitmap *b = mdev->bitmap;
217         void *addr = &page_private(b->bm_pages[page_nr]);
218         wait_event(b->bm_io_wait, !test_and_set_bit(BM_PAGE_IO_LOCK, addr));
219 }
220
221 static void bm_page_unlock_io(struct drbd_conf *mdev, int page_nr)
222 {
223         struct drbd_bitmap *b = mdev->bitmap;
224         void *addr = &page_private(b->bm_pages[page_nr]);
225         clear_bit_unlock(BM_PAGE_IO_LOCK, addr);
226         wake_up(&mdev->bitmap->bm_io_wait);
227 }
228
229 /* set _before_ submit_io, so it may be reset due to being changed
230  * while this page is in flight... will get submitted later again */
231 static void bm_set_page_unchanged(struct page *page)
232 {
233         /* use cmpxchg? */
234         clear_bit(BM_PAGE_NEED_WRITEOUT, &page_private(page));
235         clear_bit(BM_PAGE_LAZY_WRITEOUT, &page_private(page));
236 }
237
238 static void bm_set_page_need_writeout(struct page *page)
239 {
240         set_bit(BM_PAGE_NEED_WRITEOUT, &page_private(page));
241 }
242
243 /**
244  * drbd_bm_mark_for_writeout() - mark a page with a "hint" to be considered for writeout
245  * @mdev:       DRBD device.
246  * @page_nr:    the bitmap page to mark with the "hint" flag
247  *
248  * From within an activity log transaction, we mark a few pages with these
249  * hints, then call drbd_bm_write_hinted(), which will only write out changed
250  * pages which are flagged with this mark.
251  */
252 void drbd_bm_mark_for_writeout(struct drbd_conf *mdev, int page_nr)
253 {
254         struct page *page;
255         if (page_nr >= mdev->bitmap->bm_number_of_pages) {
256                 dev_warn(DEV, "BAD: page_nr: %u, number_of_pages: %u\n",
257                          page_nr, (int)mdev->bitmap->bm_number_of_pages);
258                 return;
259         }
260         page = mdev->bitmap->bm_pages[page_nr];
261         set_bit(BM_PAGE_HINT_WRITEOUT, &page_private(page));
262 }
263
264 static int bm_test_page_unchanged(struct page *page)
265 {
266         volatile const unsigned long *addr = &page_private(page);
267         return (*addr & ((1UL<<BM_PAGE_NEED_WRITEOUT)|(1UL<<BM_PAGE_LAZY_WRITEOUT))) == 0;
268 }
269
270 static void bm_set_page_io_err(struct page *page)
271 {
272         set_bit(BM_PAGE_IO_ERROR, &page_private(page));
273 }
274
275 static void bm_clear_page_io_err(struct page *page)
276 {
277         clear_bit(BM_PAGE_IO_ERROR, &page_private(page));
278 }
279
280 static void bm_set_page_lazy_writeout(struct page *page)
281 {
282         set_bit(BM_PAGE_LAZY_WRITEOUT, &page_private(page));
283 }
284
285 static int bm_test_page_lazy_writeout(struct page *page)
286 {
287         return test_bit(BM_PAGE_LAZY_WRITEOUT, &page_private(page));
288 }
289
290 /* on a 32bit box, this would allow for exactly (2<<38) bits. */
291 static unsigned int bm_word_to_page_idx(struct drbd_bitmap *b, unsigned long long_nr)
292 {
293         /* page_nr = (word*sizeof(long)) >> PAGE_SHIFT; */
294         unsigned int page_nr = long_nr >> (PAGE_SHIFT - LN2_BPL + 3);
295         BUG_ON(page_nr >= b->bm_number_of_pages);
296         return page_nr;
297 }
298
299 static unsigned int bm_bit_to_page_idx(struct drbd_bitmap *b, u64 bitnr)
300 {
301         /* page_nr = (bitnr/8) >> PAGE_SHIFT; */
302         unsigned int page_nr = bitnr >> (PAGE_SHIFT + 3);
303         BUG_ON(page_nr >= b->bm_number_of_pages);
304         return page_nr;
305 }
306
307 static unsigned long *__bm_map_pidx(struct drbd_bitmap *b, unsigned int idx, const enum km_type km)
308 {
309         struct page *page = b->bm_pages[idx];
310         return (unsigned long *) kmap_atomic(page, km);
311 }
312
313 static unsigned long *bm_map_pidx(struct drbd_bitmap *b, unsigned int idx)
314 {
315         return __bm_map_pidx(b, idx, KM_IRQ1);
316 }
317
318 static void __bm_unmap(unsigned long *p_addr, const enum km_type km)
319 {
320         kunmap_atomic(p_addr, km);
321 };
322
323 static void bm_unmap(unsigned long *p_addr)
324 {
325         return __bm_unmap(p_addr, KM_IRQ1);
326 }
327
328 /* long word offset of _bitmap_ sector */
329 #define S2W(s)  ((s)<<(BM_EXT_SHIFT-BM_BLOCK_SHIFT-LN2_BPL))
330 /* word offset from start of bitmap to word number _in_page_
331  * modulo longs per page
332 #define MLPP(X) ((X) % (PAGE_SIZE/sizeof(long))
333  hm, well, Philipp thinks gcc might not optimize the % into & (... - 1)
334  so do it explicitly:
335  */
336 #define MLPP(X) ((X) & ((PAGE_SIZE/sizeof(long))-1))
337
338 /* Long words per page */
339 #define LWPP (PAGE_SIZE/sizeof(long))
340
341 /*
342  * actually most functions herein should take a struct drbd_bitmap*, not a
343  * struct drbd_conf*, but for the debug macros I like to have the mdev around
344  * to be able to report device specific.
345  */
346
347
348 static void bm_free_pages(struct page **pages, unsigned long number)
349 {
350         unsigned long i;
351         if (!pages)
352                 return;
353
354         for (i = 0; i < number; i++) {
355                 if (!pages[i]) {
356                         printk(KERN_ALERT "drbd: bm_free_pages tried to free "
357                                           "a NULL pointer; i=%lu n=%lu\n",
358                                           i, number);
359                         continue;
360                 }
361                 __free_page(pages[i]);
362                 pages[i] = NULL;
363         }
364 }
365
366 static void bm_vk_free(void *ptr, int v)
367 {
368         if (v)
369                 vfree(ptr);
370         else
371                 kfree(ptr);
372 }
373
374 /*
375  * "have" and "want" are NUMBER OF PAGES.
376  */
377 static struct page **bm_realloc_pages(struct drbd_bitmap *b, unsigned long want)
378 {
379         struct page **old_pages = b->bm_pages;
380         struct page **new_pages, *page;
381         unsigned int i, bytes, vmalloced = 0;
382         unsigned long have = b->bm_number_of_pages;
383
384         BUG_ON(have == 0 && old_pages != NULL);
385         BUG_ON(have != 0 && old_pages == NULL);
386
387         if (have == want)
388                 return old_pages;
389
390         /* Trying kmalloc first, falling back to vmalloc.
391          * GFP_NOIO, as this is called while drbd IO is "suspended",
392          * and during resize or attach on diskless Primary,
393          * we must not block on IO to ourselves.
394          * Context is receiver thread or dmsetup. */
395         bytes = sizeof(struct page *)*want;
396         new_pages = kmalloc(bytes, GFP_NOIO);
397         if (!new_pages) {
398                 new_pages = __vmalloc(bytes,
399                                 GFP_NOIO | __GFP_HIGHMEM,
400                                 PAGE_KERNEL);
401                 if (!new_pages)
402                         return NULL;
403                 vmalloced = 1;
404         }
405
406         memset(new_pages, 0, bytes);
407         if (want >= have) {
408                 for (i = 0; i < have; i++)
409                         new_pages[i] = old_pages[i];
410                 for (; i < want; i++) {
411                         page = alloc_page(GFP_NOIO | __GFP_HIGHMEM);
412                         if (!page) {
413                                 bm_free_pages(new_pages + have, i - have);
414                                 bm_vk_free(new_pages, vmalloced);
415                                 return NULL;
416                         }
417                         /* we want to know which page it is
418                          * from the endio handlers */
419                         bm_store_page_idx(page, i);
420                         new_pages[i] = page;
421                 }
422         } else {
423                 for (i = 0; i < want; i++)
424                         new_pages[i] = old_pages[i];
425                 /* NOT HERE, we are outside the spinlock!
426                 bm_free_pages(old_pages + want, have - want);
427                 */
428         }
429
430         if (vmalloced)
431                 b->bm_flags |= BM_P_VMALLOCED;
432         else
433                 b->bm_flags &= ~BM_P_VMALLOCED;
434
435         return new_pages;
436 }
437
438 /*
439  * called on driver init only. TODO call when a device is created.
440  * allocates the drbd_bitmap, and stores it in mdev->bitmap.
441  */
442 int drbd_bm_init(struct drbd_conf *mdev)
443 {
444         struct drbd_bitmap *b = mdev->bitmap;
445         WARN_ON(b != NULL);
446         b = kzalloc(sizeof(struct drbd_bitmap), GFP_KERNEL);
447         if (!b)
448                 return -ENOMEM;
449         spin_lock_init(&b->bm_lock);
450         mutex_init(&b->bm_change);
451         init_waitqueue_head(&b->bm_io_wait);
452
453         mdev->bitmap = b;
454
455         return 0;
456 }
457
458 sector_t drbd_bm_capacity(struct drbd_conf *mdev)
459 {
460         if (!expect(mdev->bitmap))
461                 return 0;
462         return mdev->bitmap->bm_dev_capacity;
463 }
464
465 /* called on driver unload. TODO: call when a device is destroyed.
466  */
467 void drbd_bm_cleanup(struct drbd_conf *mdev)
468 {
469         if (!expect(mdev->bitmap))
470                 return;
471         bm_free_pages(mdev->bitmap->bm_pages, mdev->bitmap->bm_number_of_pages);
472         bm_vk_free(mdev->bitmap->bm_pages, (BM_P_VMALLOCED & mdev->bitmap->bm_flags));
473         kfree(mdev->bitmap);
474         mdev->bitmap = NULL;
475 }
476
477 /*
478  * since (b->bm_bits % BITS_PER_LONG) != 0,
479  * this masks out the remaining bits.
480  * Returns the number of bits cleared.
481  */
482 #define BITS_PER_PAGE           (1UL << (PAGE_SHIFT + 3))
483 #define BITS_PER_PAGE_MASK      (BITS_PER_PAGE - 1)
484 #define BITS_PER_LONG_MASK      (BITS_PER_LONG - 1)
485 static int bm_clear_surplus(struct drbd_bitmap *b)
486 {
487         unsigned long mask;
488         unsigned long *p_addr, *bm;
489         int tmp;
490         int cleared = 0;
491
492         /* number of bits modulo bits per page */
493         tmp = (b->bm_bits & BITS_PER_PAGE_MASK);
494         /* mask the used bits of the word containing the last bit */
495         mask = (1UL << (tmp & BITS_PER_LONG_MASK)) -1;
496         /* bitmap is always stored little endian,
497          * on disk and in core memory alike */
498         mask = cpu_to_lel(mask);
499
500         p_addr = bm_map_pidx(b, b->bm_number_of_pages - 1);
501         bm = p_addr + (tmp/BITS_PER_LONG);
502         if (mask) {
503                 /* If mask != 0, we are not exactly aligned, so bm now points
504                  * to the long containing the last bit.
505                  * If mask == 0, bm already points to the word immediately
506                  * after the last (long word aligned) bit. */
507                 cleared = hweight_long(*bm & ~mask);
508                 *bm &= mask;
509                 bm++;
510         }
511
512         if (BITS_PER_LONG == 32 && ((bm - p_addr) & 1) == 1) {
513                 /* on a 32bit arch, we may need to zero out
514                  * a padding long to align with a 64bit remote */
515                 cleared += hweight_long(*bm);
516                 *bm = 0;
517         }
518         bm_unmap(p_addr);
519         return cleared;
520 }
521
522 static void bm_set_surplus(struct drbd_bitmap *b)
523 {
524         unsigned long mask;
525         unsigned long *p_addr, *bm;
526         int tmp;
527
528         /* number of bits modulo bits per page */
529         tmp = (b->bm_bits & BITS_PER_PAGE_MASK);
530         /* mask the used bits of the word containing the last bit */
531         mask = (1UL << (tmp & BITS_PER_LONG_MASK)) -1;
532         /* bitmap is always stored little endian,
533          * on disk and in core memory alike */
534         mask = cpu_to_lel(mask);
535
536         p_addr = bm_map_pidx(b, b->bm_number_of_pages - 1);
537         bm = p_addr + (tmp/BITS_PER_LONG);
538         if (mask) {
539                 /* If mask != 0, we are not exactly aligned, so bm now points
540                  * to the long containing the last bit.
541                  * If mask == 0, bm already points to the word immediately
542                  * after the last (long word aligned) bit. */
543                 *bm |= ~mask;
544                 bm++;
545         }
546
547         if (BITS_PER_LONG == 32 && ((bm - p_addr) & 1) == 1) {
548                 /* on a 32bit arch, we may need to zero out
549                  * a padding long to align with a 64bit remote */
550                 *bm = ~0UL;
551         }
552         bm_unmap(p_addr);
553 }
554
555 /* you better not modify the bitmap while this is running,
556  * or its results will be stale */
557 static unsigned long bm_count_bits(struct drbd_bitmap *b)
558 {
559         unsigned long *p_addr;
560         unsigned long bits = 0;
561         unsigned long mask = (1UL << (b->bm_bits & BITS_PER_LONG_MASK)) -1;
562         int idx, i, last_word;
563
564         /* all but last page */
565         for (idx = 0; idx < b->bm_number_of_pages - 1; idx++) {
566                 p_addr = __bm_map_pidx(b, idx, KM_USER0);
567                 for (i = 0; i < LWPP; i++)
568                         bits += hweight_long(p_addr[i]);
569                 __bm_unmap(p_addr, KM_USER0);
570                 cond_resched();
571         }
572         /* last (or only) page */
573         last_word = ((b->bm_bits - 1) & BITS_PER_PAGE_MASK) >> LN2_BPL;
574         p_addr = __bm_map_pidx(b, idx, KM_USER0);
575         for (i = 0; i < last_word; i++)
576                 bits += hweight_long(p_addr[i]);
577         p_addr[last_word] &= cpu_to_lel(mask);
578         bits += hweight_long(p_addr[last_word]);
579         /* 32bit arch, may have an unused padding long */
580         if (BITS_PER_LONG == 32 && (last_word & 1) == 0)
581                 p_addr[last_word+1] = 0;
582         __bm_unmap(p_addr, KM_USER0);
583         return bits;
584 }
585
586 /* offset and len in long words.*/
587 static void bm_memset(struct drbd_bitmap *b, size_t offset, int c, size_t len)
588 {
589         unsigned long *p_addr, *bm;
590         unsigned int idx;
591         size_t do_now, end;
592
593         end = offset + len;
594
595         if (end > b->bm_words) {
596                 printk(KERN_ALERT "drbd: bm_memset end > bm_words\n");
597                 return;
598         }
599
600         while (offset < end) {
601                 do_now = min_t(size_t, ALIGN(offset + 1, LWPP), end) - offset;
602                 idx = bm_word_to_page_idx(b, offset);
603                 p_addr = bm_map_pidx(b, idx);
604                 bm = p_addr + MLPP(offset);
605                 if (bm+do_now > p_addr + LWPP) {
606                         printk(KERN_ALERT "drbd: BUG BUG BUG! p_addr:%p bm:%p do_now:%d\n",
607                                p_addr, bm, (int)do_now);
608                 } else
609                         memset(bm, c, do_now * sizeof(long));
610                 bm_unmap(p_addr);
611                 bm_set_page_need_writeout(b->bm_pages[idx]);
612                 offset += do_now;
613         }
614 }
615
616 /*
617  * make sure the bitmap has enough room for the attached storage,
618  * if necessary, resize.
619  * called whenever we may have changed the device size.
620  * returns -ENOMEM if we could not allocate enough memory, 0 on success.
621  * In case this is actually a resize, we copy the old bitmap into the new one.
622  * Otherwise, the bitmap is initialized to all bits set.
623  */
624 int drbd_bm_resize(struct drbd_conf *mdev, sector_t capacity, int set_new_bits)
625 {
626         struct drbd_bitmap *b = mdev->bitmap;
627         unsigned long bits, words, owords, obits;
628         unsigned long want, have, onpages; /* number of pages */
629         struct page **npages, **opages = NULL;
630         int err = 0, growing;
631         int opages_vmalloced;
632
633         if (!expect(b))
634                 return -ENOMEM;
635
636         drbd_bm_lock(mdev, "resize", BM_LOCKED_MASK);
637
638         dev_info(DEV, "drbd_bm_resize called with capacity == %llu\n",
639                         (unsigned long long)capacity);
640
641         if (capacity == b->bm_dev_capacity)
642                 goto out;
643
644         opages_vmalloced = (BM_P_VMALLOCED & b->bm_flags);
645
646         if (capacity == 0) {
647                 spin_lock_irq(&b->bm_lock);
648                 opages = b->bm_pages;
649                 onpages = b->bm_number_of_pages;
650                 owords = b->bm_words;
651                 b->bm_pages = NULL;
652                 b->bm_number_of_pages =
653                 b->bm_set   =
654                 b->bm_bits  =
655                 b->bm_words =
656                 b->bm_dev_capacity = 0;
657                 spin_unlock_irq(&b->bm_lock);
658                 bm_free_pages(opages, onpages);
659                 bm_vk_free(opages, opages_vmalloced);
660                 goto out;
661         }
662         bits  = BM_SECT_TO_BIT(ALIGN(capacity, BM_SECT_PER_BIT));
663
664         /* if we would use
665            words = ALIGN(bits,BITS_PER_LONG) >> LN2_BPL;
666            a 32bit host could present the wrong number of words
667            to a 64bit host.
668         */
669         words = ALIGN(bits, 64) >> LN2_BPL;
670
671         if (get_ldev(mdev)) {
672                 u64 bits_on_disk = ((u64)mdev->ldev->md.md_size_sect-MD_BM_OFFSET) << 12;
673                 put_ldev(mdev);
674                 if (bits > bits_on_disk) {
675                         dev_info(DEV, "bits = %lu\n", bits);
676                         dev_info(DEV, "bits_on_disk = %llu\n", bits_on_disk);
677                         err = -ENOSPC;
678                         goto out;
679                 }
680         }
681
682         want = ALIGN(words*sizeof(long), PAGE_SIZE) >> PAGE_SHIFT;
683         have = b->bm_number_of_pages;
684         if (want == have) {
685                 D_ASSERT(b->bm_pages != NULL);
686                 npages = b->bm_pages;
687         } else {
688                 if (drbd_insert_fault(mdev, DRBD_FAULT_BM_ALLOC))
689                         npages = NULL;
690                 else
691                         npages = bm_realloc_pages(b, want);
692         }
693
694         if (!npages) {
695                 err = -ENOMEM;
696                 goto out;
697         }
698
699         spin_lock_irq(&b->bm_lock);
700         opages = b->bm_pages;
701         owords = b->bm_words;
702         obits  = b->bm_bits;
703
704         growing = bits > obits;
705         if (opages && growing && set_new_bits)
706                 bm_set_surplus(b);
707
708         b->bm_pages = npages;
709         b->bm_number_of_pages = want;
710         b->bm_bits  = bits;
711         b->bm_words = words;
712         b->bm_dev_capacity = capacity;
713
714         if (growing) {
715                 if (set_new_bits) {
716                         bm_memset(b, owords, 0xff, words-owords);
717                         b->bm_set += bits - obits;
718                 } else
719                         bm_memset(b, owords, 0x00, words-owords);
720
721         }
722
723         if (want < have) {
724                 /* implicit: (opages != NULL) && (opages != npages) */
725                 bm_free_pages(opages + want, have - want);
726         }
727
728         (void)bm_clear_surplus(b);
729
730         spin_unlock_irq(&b->bm_lock);
731         if (opages != npages)
732                 bm_vk_free(opages, opages_vmalloced);
733         if (!growing)
734                 b->bm_set = bm_count_bits(b);
735         dev_info(DEV, "resync bitmap: bits=%lu words=%lu pages=%lu\n", bits, words, want);
736
737  out:
738         drbd_bm_unlock(mdev);
739         return err;
740 }
741
742 /* inherently racy:
743  * if not protected by other means, return value may be out of date when
744  * leaving this function...
745  * we still need to lock it, since it is important that this returns
746  * bm_set == 0 precisely.
747  *
748  * maybe bm_set should be atomic_t ?
749  */
750 unsigned long _drbd_bm_total_weight(struct drbd_conf *mdev)
751 {
752         struct drbd_bitmap *b = mdev->bitmap;
753         unsigned long s;
754         unsigned long flags;
755
756         if (!expect(b))
757                 return 0;
758         if (!expect(b->bm_pages))
759                 return 0;
760
761         spin_lock_irqsave(&b->bm_lock, flags);
762         s = b->bm_set;
763         spin_unlock_irqrestore(&b->bm_lock, flags);
764
765         return s;
766 }
767
768 unsigned long drbd_bm_total_weight(struct drbd_conf *mdev)
769 {
770         unsigned long s;
771         /* if I don't have a disk, I don't know about out-of-sync status */
772         if (!get_ldev_if_state(mdev, D_NEGOTIATING))
773                 return 0;
774         s = _drbd_bm_total_weight(mdev);
775         put_ldev(mdev);
776         return s;
777 }
778
779 size_t drbd_bm_words(struct drbd_conf *mdev)
780 {
781         struct drbd_bitmap *b = mdev->bitmap;
782         if (!expect(b))
783                 return 0;
784         if (!expect(b->bm_pages))
785                 return 0;
786
787         return b->bm_words;
788 }
789
790 unsigned long drbd_bm_bits(struct drbd_conf *mdev)
791 {
792         struct drbd_bitmap *b = mdev->bitmap;
793         if (!expect(b))
794                 return 0;
795
796         return b->bm_bits;
797 }
798
799 /* merge number words from buffer into the bitmap starting at offset.
800  * buffer[i] is expected to be little endian unsigned long.
801  * bitmap must be locked by drbd_bm_lock.
802  * currently only used from receive_bitmap.
803  */
804 void drbd_bm_merge_lel(struct drbd_conf *mdev, size_t offset, size_t number,
805                         unsigned long *buffer)
806 {
807         struct drbd_bitmap *b = mdev->bitmap;
808         unsigned long *p_addr, *bm;
809         unsigned long word, bits;
810         unsigned int idx;
811         size_t end, do_now;
812
813         end = offset + number;
814
815         if (!expect(b))
816                 return;
817         if (!expect(b->bm_pages))
818                 return;
819         if (number == 0)
820                 return;
821         WARN_ON(offset >= b->bm_words);
822         WARN_ON(end    >  b->bm_words);
823
824         spin_lock_irq(&b->bm_lock);
825         while (offset < end) {
826                 do_now = min_t(size_t, ALIGN(offset+1, LWPP), end) - offset;
827                 idx = bm_word_to_page_idx(b, offset);
828                 p_addr = bm_map_pidx(b, idx);
829                 bm = p_addr + MLPP(offset);
830                 offset += do_now;
831                 while (do_now--) {
832                         bits = hweight_long(*bm);
833                         word = *bm | *buffer++;
834                         *bm++ = word;
835                         b->bm_set += hweight_long(word) - bits;
836                 }
837                 bm_unmap(p_addr);
838                 bm_set_page_need_writeout(b->bm_pages[idx]);
839         }
840         /* with 32bit <-> 64bit cross-platform connect
841          * this is only correct for current usage,
842          * where we _know_ that we are 64 bit aligned,
843          * and know that this function is used in this way, too...
844          */
845         if (end == b->bm_words)
846                 b->bm_set -= bm_clear_surplus(b);
847         spin_unlock_irq(&b->bm_lock);
848 }
849
850 /* copy number words from the bitmap starting at offset into the buffer.
851  * buffer[i] will be little endian unsigned long.
852  */
853 void drbd_bm_get_lel(struct drbd_conf *mdev, size_t offset, size_t number,
854                      unsigned long *buffer)
855 {
856         struct drbd_bitmap *b = mdev->bitmap;
857         unsigned long *p_addr, *bm;
858         size_t end, do_now;
859
860         end = offset + number;
861
862         if (!expect(b))
863                 return;
864         if (!expect(b->bm_pages))
865                 return;
866
867         spin_lock_irq(&b->bm_lock);
868         if ((offset >= b->bm_words) ||
869             (end    >  b->bm_words) ||
870             (number <= 0))
871                 dev_err(DEV, "offset=%lu number=%lu bm_words=%lu\n",
872                         (unsigned long) offset,
873                         (unsigned long) number,
874                         (unsigned long) b->bm_words);
875         else {
876                 while (offset < end) {
877                         do_now = min_t(size_t, ALIGN(offset+1, LWPP), end) - offset;
878                         p_addr = bm_map_pidx(b, bm_word_to_page_idx(b, offset));
879                         bm = p_addr + MLPP(offset);
880                         offset += do_now;
881                         while (do_now--)
882                                 *buffer++ = *bm++;
883                         bm_unmap(p_addr);
884                 }
885         }
886         spin_unlock_irq(&b->bm_lock);
887 }
888
889 /* set all bits in the bitmap */
890 void drbd_bm_set_all(struct drbd_conf *mdev)
891 {
892         struct drbd_bitmap *b = mdev->bitmap;
893         if (!expect(b))
894                 return;
895         if (!expect(b->bm_pages))
896                 return;
897
898         spin_lock_irq(&b->bm_lock);
899         bm_memset(b, 0, 0xff, b->bm_words);
900         (void)bm_clear_surplus(b);
901         b->bm_set = b->bm_bits;
902         spin_unlock_irq(&b->bm_lock);
903 }
904
905 /* clear all bits in the bitmap */
906 void drbd_bm_clear_all(struct drbd_conf *mdev)
907 {
908         struct drbd_bitmap *b = mdev->bitmap;
909         if (!expect(b))
910                 return;
911         if (!expect(b->bm_pages))
912                 return;
913
914         spin_lock_irq(&b->bm_lock);
915         bm_memset(b, 0, 0, b->bm_words);
916         b->bm_set = 0;
917         spin_unlock_irq(&b->bm_lock);
918 }
919
920 struct bm_aio_ctx {
921         struct drbd_conf *mdev;
922         atomic_t in_flight;
923         unsigned int done;
924         unsigned flags;
925 #define BM_AIO_COPY_PAGES       1
926 #define BM_AIO_WRITE_HINTED     2
927 #define BM_WRITE_ALL_PAGES      4
928         int error;
929         struct kref kref;
930 };
931
932 static void bm_aio_ctx_destroy(struct kref *kref)
933 {
934         struct bm_aio_ctx *ctx = container_of(kref, struct bm_aio_ctx, kref);
935
936         put_ldev(ctx->mdev);
937         kfree(ctx);
938 }
939
940 /* bv_page may be a copy, or may be the original */
941 static void bm_async_io_complete(struct bio *bio, int error)
942 {
943         struct bm_aio_ctx *ctx = bio->bi_private;
944         struct drbd_conf *mdev = ctx->mdev;
945         struct drbd_bitmap *b = mdev->bitmap;
946         unsigned int idx = bm_page_to_idx(bio->bi_io_vec[0].bv_page);
947         int uptodate = bio_flagged(bio, BIO_UPTODATE);
948
949
950         /* strange behavior of some lower level drivers...
951          * fail the request by clearing the uptodate flag,
952          * but do not return any error?!
953          * do we want to WARN() on this? */
954         if (!error && !uptodate)
955                 error = -EIO;
956
957         if ((ctx->flags & BM_AIO_COPY_PAGES) == 0 &&
958             !bm_test_page_unchanged(b->bm_pages[idx]))
959                 dev_warn(DEV, "bitmap page idx %u changed during IO!\n", idx);
960
961         if (error) {
962                 /* ctx error will hold the completed-last non-zero error code,
963                  * in case error codes differ. */
964                 ctx->error = error;
965                 bm_set_page_io_err(b->bm_pages[idx]);
966                 /* Not identical to on disk version of it.
967                  * Is BM_PAGE_IO_ERROR enough? */
968                 if (__ratelimit(&drbd_ratelimit_state))
969                         dev_err(DEV, "IO ERROR %d on bitmap page idx %u\n",
970                                         error, idx);
971         } else {
972                 bm_clear_page_io_err(b->bm_pages[idx]);
973                 dynamic_dev_dbg(DEV, "bitmap page idx %u completed\n", idx);
974         }
975
976         bm_page_unlock_io(mdev, idx);
977
978         if (ctx->flags & BM_AIO_COPY_PAGES)
979                 mempool_free(bio->bi_io_vec[0].bv_page, drbd_md_io_page_pool);
980
981         bio_put(bio);
982
983         if (atomic_dec_and_test(&ctx->in_flight)) {
984                 ctx->done = 1;
985                 wake_up(&mdev->misc_wait);
986                 kref_put(&ctx->kref, &bm_aio_ctx_destroy);
987         }
988 }
989
990 static void bm_page_io_async(struct bm_aio_ctx *ctx, int page_nr, int rw) __must_hold(local)
991 {
992         struct bio *bio = bio_alloc_drbd(GFP_NOIO);
993         struct drbd_conf *mdev = ctx->mdev;
994         struct drbd_bitmap *b = mdev->bitmap;
995         struct page *page;
996         unsigned int len;
997
998         sector_t on_disk_sector =
999                 mdev->ldev->md.md_offset + mdev->ldev->md.bm_offset;
1000         on_disk_sector += ((sector_t)page_nr) << (PAGE_SHIFT-9);
1001
1002         /* this might happen with very small
1003          * flexible external meta data device,
1004          * or with PAGE_SIZE > 4k */
1005         len = min_t(unsigned int, PAGE_SIZE,
1006                 (drbd_md_last_sector(mdev->ldev) - on_disk_sector + 1)<<9);
1007
1008         /* serialize IO on this page */
1009         bm_page_lock_io(mdev, page_nr);
1010         /* before memcpy and submit,
1011          * so it can be redirtied any time */
1012         bm_set_page_unchanged(b->bm_pages[page_nr]);
1013
1014         if (ctx->flags & BM_AIO_COPY_PAGES) {
1015                 void *src, *dest;
1016                 page = mempool_alloc(drbd_md_io_page_pool, __GFP_HIGHMEM|__GFP_WAIT);
1017                 dest = kmap_atomic(page, KM_USER0);
1018                 src = kmap_atomic(b->bm_pages[page_nr], KM_USER1);
1019                 memcpy(dest, src, PAGE_SIZE);
1020                 kunmap_atomic(src, KM_USER1);
1021                 kunmap_atomic(dest, KM_USER0);
1022                 bm_store_page_idx(page, page_nr);
1023         } else
1024                 page = b->bm_pages[page_nr];
1025
1026         bio->bi_bdev = mdev->ldev->md_bdev;
1027         bio->bi_sector = on_disk_sector;
1028         /* bio_add_page of a single page to an empty bio will always succeed,
1029          * according to api.  Do we want to assert that? */
1030         bio_add_page(bio, page, len, 0);
1031         bio->bi_private = ctx;
1032         bio->bi_end_io = bm_async_io_complete;
1033
1034         if (drbd_insert_fault(mdev, (rw & WRITE) ? DRBD_FAULT_MD_WR : DRBD_FAULT_MD_RD)) {
1035                 bio->bi_rw |= rw;
1036                 bio_endio(bio, -EIO);
1037         } else {
1038                 submit_bio(rw, bio);
1039                 /* this should not count as user activity and cause the
1040                  * resync to throttle -- see drbd_rs_should_slow_down(). */
1041                 atomic_add(len >> 9, &mdev->rs_sect_ev);
1042         }
1043 }
1044
1045 /*
1046  * bm_rw: read/write the whole bitmap from/to its on disk location.
1047  */
1048 static int bm_rw(struct drbd_conf *mdev, int rw, unsigned flags, unsigned lazy_writeout_upper_idx) __must_hold(local)
1049 {
1050         struct bm_aio_ctx *ctx;
1051         struct drbd_bitmap *b = mdev->bitmap;
1052         int num_pages, i, count = 0;
1053         unsigned long now;
1054         char ppb[10];
1055         int err = 0;
1056
1057         /*
1058          * We are protected against bitmap disappearing/resizing by holding an
1059          * ldev reference (caller must have called get_ldev()).
1060          * For read/write, we are protected against changes to the bitmap by
1061          * the bitmap lock (see drbd_bitmap_io).
1062          * For lazy writeout, we don't care for ongoing changes to the bitmap,
1063          * as we submit copies of pages anyways.
1064          */
1065
1066         ctx = kmalloc(sizeof(struct bm_aio_ctx), GFP_NOIO);
1067         if (!ctx)
1068                 return -ENOMEM;
1069
1070         *ctx = (struct bm_aio_ctx) {
1071                 .mdev = mdev,
1072                 .in_flight = ATOMIC_INIT(1),
1073                 .done = 0,
1074                 .flags = flags,
1075                 .error = 0,
1076                 .kref = { ATOMIC_INIT(2) },
1077         };
1078
1079         if (!get_ldev_if_state(mdev, D_ATTACHING)) {  /* put is in bm_aio_ctx_destroy() */
1080                 dev_err(DEV, "ASSERT FAILED: get_ldev_if_state() == 1 in bm_rw()\n");
1081                 kfree(ctx);
1082                 return -ENODEV;
1083         }
1084
1085         if (!ctx->flags)
1086                 WARN_ON(!(BM_LOCKED_MASK & b->bm_flags));
1087
1088         num_pages = b->bm_number_of_pages;
1089
1090         now = jiffies;
1091
1092         /* let the layers below us try to merge these bios... */
1093         for (i = 0; i < num_pages; i++) {
1094                 /* ignore completely unchanged pages */
1095                 if (lazy_writeout_upper_idx && i == lazy_writeout_upper_idx)
1096                         break;
1097                 if (rw & WRITE) {
1098                         if ((flags & BM_AIO_WRITE_HINTED) &&
1099                             !test_and_clear_bit(BM_PAGE_HINT_WRITEOUT,
1100                                     &page_private(b->bm_pages[i])))
1101                                 continue;
1102
1103                         if (!(flags & BM_WRITE_ALL_PAGES) &&
1104                             bm_test_page_unchanged(b->bm_pages[i])) {
1105                                 dynamic_dev_dbg(DEV, "skipped bm write for idx %u\n", i);
1106                                 continue;
1107                         }
1108                         /* during lazy writeout,
1109                          * ignore those pages not marked for lazy writeout. */
1110                         if (lazy_writeout_upper_idx &&
1111                             !bm_test_page_lazy_writeout(b->bm_pages[i])) {
1112                                 dynamic_dev_dbg(DEV, "skipped bm lazy write for idx %u\n", i);
1113                                 continue;
1114                         }
1115                 }
1116                 atomic_inc(&ctx->in_flight);
1117                 bm_page_io_async(ctx, i, rw);
1118                 ++count;
1119                 cond_resched();
1120         }
1121
1122         /*
1123          * We initialize ctx->in_flight to one to make sure bm_async_io_complete
1124          * will not set ctx->done early, and decrement / test it here.  If there
1125          * are still some bios in flight, we need to wait for them here.
1126          * If all IO is done already (or nothing had been submitted), there is
1127          * no need to wait.  Still, we need to put the kref associated with the
1128          * "in_flight reached zero, all done" event.
1129          */
1130         if (!atomic_dec_and_test(&ctx->in_flight))
1131                 wait_until_done_or_force_detached(mdev, mdev->ldev, &ctx->done);
1132         else
1133                 kref_put(&ctx->kref, &bm_aio_ctx_destroy);
1134
1135         /* summary for global bitmap IO */
1136         if (flags == 0)
1137                 dev_info(DEV, "bitmap %s of %u pages took %lu jiffies\n",
1138                          rw == WRITE ? "WRITE" : "READ",
1139                          count, jiffies - now);
1140
1141         if (ctx->error) {
1142                 dev_alert(DEV, "we had at least one MD IO ERROR during bitmap IO\n");
1143                 drbd_chk_io_error(mdev, 1, DRBD_META_IO_ERROR);
1144                 err = -EIO; /* ctx->error ? */
1145         }
1146
1147         if (atomic_read(&ctx->in_flight))
1148                 err = -EIO; /* Disk timeout/force-detach during IO... */
1149
1150         now = jiffies;
1151         if (rw == WRITE) {
1152                 drbd_md_flush(mdev);
1153         } else /* rw == READ */ {
1154                 b->bm_set = bm_count_bits(b);
1155                 dev_info(DEV, "recounting of set bits took additional %lu jiffies\n",
1156                      jiffies - now);
1157         }
1158         now = b->bm_set;
1159
1160         if (flags == 0)
1161                 dev_info(DEV, "%s (%lu bits) marked out-of-sync by on disk bit-map.\n",
1162                      ppsize(ppb, now << (BM_BLOCK_SHIFT-10)), now);
1163
1164         kref_put(&ctx->kref, &bm_aio_ctx_destroy);
1165         return err;
1166 }
1167
1168 /**
1169  * drbd_bm_read() - Read the whole bitmap from its on disk location.
1170  * @mdev:       DRBD device.
1171  */
1172 int drbd_bm_read(struct drbd_conf *mdev) __must_hold(local)
1173 {
1174         return bm_rw(mdev, READ, 0, 0);
1175 }
1176
1177 /**
1178  * drbd_bm_write() - Write the whole bitmap to its on disk location.
1179  * @mdev:       DRBD device.
1180  *
1181  * Will only write pages that have changed since last IO.
1182  */
1183 int drbd_bm_write(struct drbd_conf *mdev) __must_hold(local)
1184 {
1185         return bm_rw(mdev, WRITE, 0, 0);
1186 }
1187
1188 /**
1189  * drbd_bm_write_all() - Write the whole bitmap to its on disk location.
1190  * @mdev:       DRBD device.
1191  *
1192  * Will write all pages.
1193  */
1194 int drbd_bm_write_all(struct drbd_conf *mdev) __must_hold(local)
1195 {
1196         return bm_rw(mdev, WRITE, BM_WRITE_ALL_PAGES, 0);
1197 }
1198
1199 /**
1200  * drbd_bm_lazy_write_out() - Write bitmap pages 0 to @upper_idx-1, if they have changed.
1201  * @mdev:       DRBD device.
1202  * @upper_idx:  0: write all changed pages; +ve: page index to stop scanning for changed pages
1203  */
1204 int drbd_bm_write_lazy(struct drbd_conf *mdev, unsigned upper_idx) __must_hold(local)
1205 {
1206         return bm_rw(mdev, WRITE, BM_AIO_COPY_PAGES, upper_idx);
1207 }
1208
1209 /**
1210  * drbd_bm_write_copy_pages() - Write the whole bitmap to its on disk location.
1211  * @mdev:       DRBD device.
1212  *
1213  * Will only write pages that have changed since last IO.
1214  * In contrast to drbd_bm_write(), this will copy the bitmap pages
1215  * to temporary writeout pages. It is intended to trigger a full write-out
1216  * while still allowing the bitmap to change, for example if a resync or online
1217  * verify is aborted due to a failed peer disk, while local IO continues, or
1218  * pending resync acks are still being processed.
1219  */
1220 int drbd_bm_write_copy_pages(struct drbd_conf *mdev) __must_hold(local)
1221 {
1222         return bm_rw(mdev, WRITE, BM_AIO_COPY_PAGES, 0);
1223 }
1224
1225 /**
1226  * drbd_bm_write_hinted() - Write bitmap pages with "hint" marks, if they have changed.
1227  * @mdev:       DRBD device.
1228  */
1229 int drbd_bm_write_hinted(struct drbd_conf *mdev) __must_hold(local)
1230 {
1231         return bm_rw(mdev, WRITE, BM_AIO_WRITE_HINTED | BM_AIO_COPY_PAGES, 0);
1232 }
1233
1234 /**
1235  * drbd_bm_write_page() - Writes a PAGE_SIZE aligned piece of bitmap
1236  * @mdev:       DRBD device.
1237  * @idx:        bitmap page index
1238  *
1239  * We don't want to special case on logical_block_size of the backend device,
1240  * so we submit PAGE_SIZE aligned pieces.
1241  * Note that on "most" systems, PAGE_SIZE is 4k.
1242  *
1243  * In case this becomes an issue on systems with larger PAGE_SIZE,
1244  * we may want to change this again to write 4k aligned 4k pieces.
1245  */
1246 int drbd_bm_write_page(struct drbd_conf *mdev, unsigned int idx) __must_hold(local)
1247 {
1248         struct bm_aio_ctx *ctx;
1249         int err;
1250
1251         if (bm_test_page_unchanged(mdev->bitmap->bm_pages[idx])) {
1252                 dynamic_dev_dbg(DEV, "skipped bm page write for idx %u\n", idx);
1253                 return 0;
1254         }
1255
1256         ctx = kmalloc(sizeof(struct bm_aio_ctx), GFP_NOIO);
1257         if (!ctx)
1258                 return -ENOMEM;
1259
1260         *ctx = (struct bm_aio_ctx) {
1261                 .mdev = mdev,
1262                 .in_flight = ATOMIC_INIT(1),
1263                 .done = 0,
1264                 .flags = BM_AIO_COPY_PAGES,
1265                 .error = 0,
1266                 .kref = { ATOMIC_INIT(2) },
1267         };
1268
1269         if (!get_ldev_if_state(mdev, D_ATTACHING)) {  /* put is in bm_aio_ctx_destroy() */
1270                 dev_err(DEV, "ASSERT FAILED: get_ldev_if_state() == 1 in drbd_bm_write_page()\n");
1271                 kfree(ctx);
1272                 return -ENODEV;
1273         }
1274
1275         bm_page_io_async(ctx, idx, WRITE_SYNC);
1276         wait_until_done_or_force_detached(mdev, mdev->ldev, &ctx->done);
1277
1278         if (ctx->error)
1279                 drbd_chk_io_error(mdev, 1, DRBD_META_IO_ERROR);
1280                 /* that causes us to detach, so the in memory bitmap will be
1281                  * gone in a moment as well. */
1282
1283         mdev->bm_writ_cnt++;
1284         err = atomic_read(&ctx->in_flight) ? -EIO : ctx->error;
1285         kref_put(&ctx->kref, &bm_aio_ctx_destroy);
1286         return err;
1287 }
1288
1289 /* NOTE
1290  * find_first_bit returns int, we return unsigned long.
1291  * For this to work on 32bit arch with bitnumbers > (1<<32),
1292  * we'd need to return u64, and get a whole lot of other places
1293  * fixed where we still use unsigned long.
1294  *
1295  * this returns a bit number, NOT a sector!
1296  */
1297 static unsigned long __bm_find_next(struct drbd_conf *mdev, unsigned long bm_fo,
1298         const int find_zero_bit, const enum km_type km)
1299 {
1300         struct drbd_bitmap *b = mdev->bitmap;
1301         unsigned long *p_addr;
1302         unsigned long bit_offset;
1303         unsigned i;
1304
1305
1306         if (bm_fo > b->bm_bits) {
1307                 dev_err(DEV, "bm_fo=%lu bm_bits=%lu\n", bm_fo, b->bm_bits);
1308                 bm_fo = DRBD_END_OF_BITMAP;
1309         } else {
1310                 while (bm_fo < b->bm_bits) {
1311                         /* bit offset of the first bit in the page */
1312                         bit_offset = bm_fo & ~BITS_PER_PAGE_MASK;
1313                         p_addr = __bm_map_pidx(b, bm_bit_to_page_idx(b, bm_fo), km);
1314
1315                         if (find_zero_bit)
1316                                 i = find_next_zero_bit_le(p_addr,
1317                                                 PAGE_SIZE*8, bm_fo & BITS_PER_PAGE_MASK);
1318                         else
1319                                 i = find_next_bit_le(p_addr,
1320                                                 PAGE_SIZE*8, bm_fo & BITS_PER_PAGE_MASK);
1321
1322                         __bm_unmap(p_addr, km);
1323                         if (i < PAGE_SIZE*8) {
1324                                 bm_fo = bit_offset + i;
1325                                 if (bm_fo >= b->bm_bits)
1326                                         break;
1327                                 goto found;
1328                         }
1329                         bm_fo = bit_offset + PAGE_SIZE*8;
1330                 }
1331                 bm_fo = DRBD_END_OF_BITMAP;
1332         }
1333  found:
1334         return bm_fo;
1335 }
1336
1337 static unsigned long bm_find_next(struct drbd_conf *mdev,
1338         unsigned long bm_fo, const int find_zero_bit)
1339 {
1340         struct drbd_bitmap *b = mdev->bitmap;
1341         unsigned long i = DRBD_END_OF_BITMAP;
1342
1343         if (!expect(b))
1344                 return i;
1345         if (!expect(b->bm_pages))
1346                 return i;
1347
1348         spin_lock_irq(&b->bm_lock);
1349         if (BM_DONT_TEST & b->bm_flags)
1350                 bm_print_lock_info(mdev);
1351
1352         i = __bm_find_next(mdev, bm_fo, find_zero_bit, KM_IRQ1);
1353
1354         spin_unlock_irq(&b->bm_lock);
1355         return i;
1356 }
1357
1358 unsigned long drbd_bm_find_next(struct drbd_conf *mdev, unsigned long bm_fo)
1359 {
1360         return bm_find_next(mdev, bm_fo, 0);
1361 }
1362
1363 #if 0
1364 /* not yet needed for anything. */
1365 unsigned long drbd_bm_find_next_zero(struct drbd_conf *mdev, unsigned long bm_fo)
1366 {
1367         return bm_find_next(mdev, bm_fo, 1);
1368 }
1369 #endif
1370
1371 /* does not spin_lock_irqsave.
1372  * you must take drbd_bm_lock() first */
1373 unsigned long _drbd_bm_find_next(struct drbd_conf *mdev, unsigned long bm_fo)
1374 {
1375         /* WARN_ON(!(BM_DONT_SET & mdev->b->bm_flags)); */
1376         return __bm_find_next(mdev, bm_fo, 0, KM_USER1);
1377 }
1378
1379 unsigned long _drbd_bm_find_next_zero(struct drbd_conf *mdev, unsigned long bm_fo)
1380 {
1381         /* WARN_ON(!(BM_DONT_SET & mdev->b->bm_flags)); */
1382         return __bm_find_next(mdev, bm_fo, 1, KM_USER1);
1383 }
1384
1385 /* returns number of bits actually changed.
1386  * for val != 0, we change 0 -> 1, return code positive
1387  * for val == 0, we change 1 -> 0, return code negative
1388  * wants bitnr, not sector.
1389  * expected to be called for only a few bits (e - s about BITS_PER_LONG).
1390  * Must hold bitmap lock already. */
1391 static int __bm_change_bits_to(struct drbd_conf *mdev, const unsigned long s,
1392         unsigned long e, int val)
1393 {
1394         struct drbd_bitmap *b = mdev->bitmap;
1395         unsigned long *p_addr = NULL;
1396         unsigned long bitnr;
1397         unsigned int last_page_nr = -1U;
1398         int c = 0;
1399         int changed_total = 0;
1400
1401         if (e >= b->bm_bits) {
1402                 dev_err(DEV, "ASSERT FAILED: bit_s=%lu bit_e=%lu bm_bits=%lu\n",
1403                                 s, e, b->bm_bits);
1404                 e = b->bm_bits ? b->bm_bits -1 : 0;
1405         }
1406         for (bitnr = s; bitnr <= e; bitnr++) {
1407                 unsigned int page_nr = bm_bit_to_page_idx(b, bitnr);
1408                 if (page_nr != last_page_nr) {
1409                         if (p_addr)
1410                                 __bm_unmap(p_addr, KM_IRQ1);
1411                         if (c < 0)
1412                                 bm_set_page_lazy_writeout(b->bm_pages[last_page_nr]);
1413                         else if (c > 0)
1414                                 bm_set_page_need_writeout(b->bm_pages[last_page_nr]);
1415                         changed_total += c;
1416                         c = 0;
1417                         p_addr = __bm_map_pidx(b, page_nr, KM_IRQ1);
1418                         last_page_nr = page_nr;
1419                 }
1420                 if (val)
1421                         c += (0 == __test_and_set_bit_le(bitnr & BITS_PER_PAGE_MASK, p_addr));
1422                 else
1423                         c -= (0 != __test_and_clear_bit_le(bitnr & BITS_PER_PAGE_MASK, p_addr));
1424         }
1425         if (p_addr)
1426                 __bm_unmap(p_addr, KM_IRQ1);
1427         if (c < 0)
1428                 bm_set_page_lazy_writeout(b->bm_pages[last_page_nr]);
1429         else if (c > 0)
1430                 bm_set_page_need_writeout(b->bm_pages[last_page_nr]);
1431         changed_total += c;
1432         b->bm_set += changed_total;
1433         return changed_total;
1434 }
1435
1436 /* returns number of bits actually changed.
1437  * for val != 0, we change 0 -> 1, return code positive
1438  * for val == 0, we change 1 -> 0, return code negative
1439  * wants bitnr, not sector */
1440 static int bm_change_bits_to(struct drbd_conf *mdev, const unsigned long s,
1441         const unsigned long e, int val)
1442 {
1443         unsigned long flags;
1444         struct drbd_bitmap *b = mdev->bitmap;
1445         int c = 0;
1446
1447         if (!expect(b))
1448                 return 1;
1449         if (!expect(b->bm_pages))
1450                 return 0;
1451
1452         spin_lock_irqsave(&b->bm_lock, flags);
1453         if ((val ? BM_DONT_SET : BM_DONT_CLEAR) & b->bm_flags)
1454                 bm_print_lock_info(mdev);
1455
1456         c = __bm_change_bits_to(mdev, s, e, val);
1457
1458         spin_unlock_irqrestore(&b->bm_lock, flags);
1459         return c;
1460 }
1461
1462 /* returns number of bits changed 0 -> 1 */
1463 int drbd_bm_set_bits(struct drbd_conf *mdev, const unsigned long s, const unsigned long e)
1464 {
1465         return bm_change_bits_to(mdev, s, e, 1);
1466 }
1467
1468 /* returns number of bits changed 1 -> 0 */
1469 int drbd_bm_clear_bits(struct drbd_conf *mdev, const unsigned long s, const unsigned long e)
1470 {
1471         return -bm_change_bits_to(mdev, s, e, 0);
1472 }
1473
1474 /* sets all bits in full words,
1475  * from first_word up to, but not including, last_word */
1476 static inline void bm_set_full_words_within_one_page(struct drbd_bitmap *b,
1477                 int page_nr, int first_word, int last_word)
1478 {
1479         int i;
1480         int bits;
1481         int changed = 0;
1482         unsigned long *paddr = kmap_atomic(b->bm_pages[page_nr], KM_IRQ1);
1483         for (i = first_word; i < last_word; i++) {
1484                 bits = hweight_long(paddr[i]);
1485                 paddr[i] = ~0UL;
1486                 changed += BITS_PER_LONG - bits;
1487         }
1488         kunmap_atomic(paddr, KM_IRQ1);
1489         if (changed) {
1490                 /* We only need lazy writeout, the information is still in the
1491                  * remote bitmap as well, and is reconstructed during the next
1492                  * bitmap exchange, if lost locally due to a crash. */
1493                 bm_set_page_lazy_writeout(b->bm_pages[page_nr]);
1494                 b->bm_set += changed;
1495         }
1496 }
1497
1498 /* Same thing as drbd_bm_set_bits,
1499  * but more efficient for a large bit range.
1500  * You must first drbd_bm_lock().
1501  * Can be called to set the whole bitmap in one go.
1502  * Sets bits from s to e _inclusive_. */
1503 void _drbd_bm_set_bits(struct drbd_conf *mdev, const unsigned long s, const unsigned long e)
1504 {
1505         /* First set_bit from the first bit (s)
1506          * up to the next long boundary (sl),
1507          * then assign full words up to the last long boundary (el),
1508          * then set_bit up to and including the last bit (e).
1509          *
1510          * Do not use memset, because we must account for changes,
1511          * so we need to loop over the words with hweight() anyways.
1512          */
1513         struct drbd_bitmap *b = mdev->bitmap;
1514         unsigned long sl = ALIGN(s,BITS_PER_LONG);
1515         unsigned long el = (e+1) & ~((unsigned long)BITS_PER_LONG-1);
1516         int first_page;
1517         int last_page;
1518         int page_nr;
1519         int first_word;
1520         int last_word;
1521
1522         if (e - s <= 3*BITS_PER_LONG) {
1523                 /* don't bother; el and sl may even be wrong. */
1524                 spin_lock_irq(&b->bm_lock);
1525                 __bm_change_bits_to(mdev, s, e, 1);
1526                 spin_unlock_irq(&b->bm_lock);
1527                 return;
1528         }
1529
1530         /* difference is large enough that we can trust sl and el */
1531
1532         spin_lock_irq(&b->bm_lock);
1533
1534         /* bits filling the current long */
1535         if (sl)
1536                 __bm_change_bits_to(mdev, s, sl-1, 1);
1537
1538         first_page = sl >> (3 + PAGE_SHIFT);
1539         last_page = el >> (3 + PAGE_SHIFT);
1540
1541         /* MLPP: modulo longs per page */
1542         /* LWPP: long words per page */
1543         first_word = MLPP(sl >> LN2_BPL);
1544         last_word = LWPP;
1545
1546         /* first and full pages, unless first page == last page */
1547         for (page_nr = first_page; page_nr < last_page; page_nr++) {
1548                 bm_set_full_words_within_one_page(mdev->bitmap, page_nr, first_word, last_word);
1549                 spin_unlock_irq(&b->bm_lock);
1550                 cond_resched();
1551                 first_word = 0;
1552                 spin_lock_irq(&b->bm_lock);
1553         }
1554         /* last page (respectively only page, for first page == last page) */
1555         last_word = MLPP(el >> LN2_BPL);
1556
1557         /* consider bitmap->bm_bits = 32768, bitmap->bm_number_of_pages = 1. (or multiples).
1558          * ==> e = 32767, el = 32768, last_page = 2,
1559          * and now last_word = 0.
1560          * We do not want to touch last_page in this case,
1561          * as we did not allocate it, it is not present in bitmap->bm_pages.
1562          */
1563         if (last_word)
1564                 bm_set_full_words_within_one_page(mdev->bitmap, last_page, first_word, last_word);
1565
1566         /* possibly trailing bits.
1567          * example: (e & 63) == 63, el will be e+1.
1568          * if that even was the very last bit,
1569          * it would trigger an assert in __bm_change_bits_to()
1570          */
1571         if (el <= e)
1572                 __bm_change_bits_to(mdev, el, e, 1);
1573         spin_unlock_irq(&b->bm_lock);
1574 }
1575
1576 /* returns bit state
1577  * wants bitnr, NOT sector.
1578  * inherently racy... area needs to be locked by means of {al,rs}_lru
1579  *  1 ... bit set
1580  *  0 ... bit not set
1581  * -1 ... first out of bounds access, stop testing for bits!
1582  */
1583 int drbd_bm_test_bit(struct drbd_conf *mdev, const unsigned long bitnr)
1584 {
1585         unsigned long flags;
1586         struct drbd_bitmap *b = mdev->bitmap;
1587         unsigned long *p_addr;
1588         int i;
1589
1590         if (!expect(b))
1591                 return 0;
1592         if (!expect(b->bm_pages))
1593                 return 0;
1594
1595         spin_lock_irqsave(&b->bm_lock, flags);
1596         if (BM_DONT_TEST & b->bm_flags)
1597                 bm_print_lock_info(mdev);
1598         if (bitnr < b->bm_bits) {
1599                 p_addr = bm_map_pidx(b, bm_bit_to_page_idx(b, bitnr));
1600                 i = test_bit_le(bitnr & BITS_PER_PAGE_MASK, p_addr) ? 1 : 0;
1601                 bm_unmap(p_addr);
1602         } else if (bitnr == b->bm_bits) {
1603                 i = -1;
1604         } else { /* (bitnr > b->bm_bits) */
1605                 dev_err(DEV, "bitnr=%lu > bm_bits=%lu\n", bitnr, b->bm_bits);
1606                 i = 0;
1607         }
1608
1609         spin_unlock_irqrestore(&b->bm_lock, flags);
1610         return i;
1611 }
1612
1613 /* returns number of bits set in the range [s, e] */
1614 int drbd_bm_count_bits(struct drbd_conf *mdev, const unsigned long s, const unsigned long e)
1615 {
1616         unsigned long flags;
1617         struct drbd_bitmap *b = mdev->bitmap;
1618         unsigned long *p_addr = NULL;
1619         unsigned long bitnr;
1620         unsigned int page_nr = -1U;
1621         int c = 0;
1622
1623         /* If this is called without a bitmap, that is a bug.  But just to be
1624          * robust in case we screwed up elsewhere, in that case pretend there
1625          * was one dirty bit in the requested area, so we won't try to do a
1626          * local read there (no bitmap probably implies no disk) */
1627         if (!expect(b))
1628                 return 1;
1629         if (!expect(b->bm_pages))
1630                 return 1;
1631
1632         spin_lock_irqsave(&b->bm_lock, flags);
1633         if (BM_DONT_TEST & b->bm_flags)
1634                 bm_print_lock_info(mdev);
1635         for (bitnr = s; bitnr <= e; bitnr++) {
1636                 unsigned int idx = bm_bit_to_page_idx(b, bitnr);
1637                 if (page_nr != idx) {
1638                         page_nr = idx;
1639                         if (p_addr)
1640                                 bm_unmap(p_addr);
1641                         p_addr = bm_map_pidx(b, idx);
1642                 }
1643                 if (expect(bitnr < b->bm_bits))
1644                         c += (0 != test_bit_le(bitnr - (page_nr << (PAGE_SHIFT+3)), p_addr));
1645                 else
1646                         dev_err(DEV, "bitnr=%lu bm_bits=%lu\n", bitnr, b->bm_bits);
1647         }
1648         if (p_addr)
1649                 bm_unmap(p_addr);
1650         spin_unlock_irqrestore(&b->bm_lock, flags);
1651         return c;
1652 }
1653
1654
1655 /* inherently racy...
1656  * return value may be already out-of-date when this function returns.
1657  * but the general usage is that this is only use during a cstate when bits are
1658  * only cleared, not set, and typically only care for the case when the return
1659  * value is zero, or we already "locked" this "bitmap extent" by other means.
1660  *
1661  * enr is bm-extent number, since we chose to name one sector (512 bytes)
1662  * worth of the bitmap a "bitmap extent".
1663  *
1664  * TODO
1665  * I think since we use it like a reference count, we should use the real
1666  * reference count of some bitmap extent element from some lru instead...
1667  *
1668  */
1669 int drbd_bm_e_weight(struct drbd_conf *mdev, unsigned long enr)
1670 {
1671         struct drbd_bitmap *b = mdev->bitmap;
1672         int count, s, e;
1673         unsigned long flags;
1674         unsigned long *p_addr, *bm;
1675
1676         if (!expect(b))
1677                 return 0;
1678         if (!expect(b->bm_pages))
1679                 return 0;
1680
1681         spin_lock_irqsave(&b->bm_lock, flags);
1682         if (BM_DONT_TEST & b->bm_flags)
1683                 bm_print_lock_info(mdev);
1684
1685         s = S2W(enr);
1686         e = min((size_t)S2W(enr+1), b->bm_words);
1687         count = 0;
1688         if (s < b->bm_words) {
1689                 int n = e-s;
1690                 p_addr = bm_map_pidx(b, bm_word_to_page_idx(b, s));
1691                 bm = p_addr + MLPP(s);
1692                 while (n--)
1693                         count += hweight_long(*bm++);
1694                 bm_unmap(p_addr);
1695         } else {
1696                 dev_err(DEV, "start offset (%d) too large in drbd_bm_e_weight\n", s);
1697         }
1698         spin_unlock_irqrestore(&b->bm_lock, flags);
1699         return count;
1700 }