Lines Matching refs:device
113 static void __bm_print_lock_info(struct drbd_device *device, const char *func)
115 struct drbd_bitmap *b = device->bitmap;
118 drbd_err(device, "FIXME %s[%d] in %s, bitmap locked for '%s' by %s[%d]\n",
124 void drbd_bm_lock(struct drbd_device *device, char *why, enum bm_flag flags)
126 struct drbd_bitmap *b = device->bitmap;
130 drbd_err(device, "FIXME no bitmap in drbd_bm_lock!?\n");
137 drbd_warn(device, "%s[%d] going to '%s' but bitmap already locked for '%s' by %s[%d]\n",
144 drbd_err(device, "FIXME bitmap already locked in bm_lock\n");
151 void drbd_bm_unlock(struct drbd_device *device)
153 struct drbd_bitmap *b = device->bitmap;
155 drbd_err(device, "FIXME no bitmap in drbd_bm_unlock!?\n");
159 if (!(BM_LOCKED_MASK & device->bitmap->bm_flags))
160 drbd_err(device, "FIXME bitmap not locked in bm_unlock\n");
211 static void bm_page_lock_io(struct drbd_device *device, int page_nr)
213 struct drbd_bitmap *b = device->bitmap;
218 static void bm_page_unlock_io(struct drbd_device *device, int page_nr)
220 struct drbd_bitmap *b = device->bitmap;
223 wake_up(&device->bitmap->bm_io_wait);
240 void drbd_bm_reset_al_hints(struct drbd_device *device)
242 device->bitmap->n_bitmap_hints = 0;
247 * @device: DRBD device.
254 void drbd_bm_mark_for_writeout(struct drbd_device *device, int page_nr)
256 struct drbd_bitmap *b = device->bitmap;
258 if (page_nr >= device->bitmap->bm_number_of_pages) {
259 drbd_warn(device, "BAD: page_nr: %u, number_of_pages: %u\n",
260 page_nr, (int)device->bitmap->bm_number_of_pages);
263 page = device->bitmap->bm_pages[page_nr];
348 * struct drbd_device*, but for the debug macros I like to have the device around
349 * to be able to report device specific.
431 * allocates the drbd_bitmap and stores it in device->bitmap.
433 int drbd_bm_init(struct drbd_device *device)
435 struct drbd_bitmap *b = device->bitmap;
444 device->bitmap = b;
449 sector_t drbd_bm_capacity(struct drbd_device *device)
451 if (!expect(device, device->bitmap))
453 return device->bitmap->bm_dev_capacity;
456 /* called on driver unload. TODO: call when a device is destroyed.
458 void drbd_bm_cleanup(struct drbd_device *device)
460 if (!expect(device, device->bitmap))
462 bm_free_pages(device->bitmap->bm_pages, device->bitmap->bm_number_of_pages);
463 bm_vk_free(device->bitmap->bm_pages);
464 kfree(device->bitmap);
465 device->bitmap = NULL;
625 * called whenever we may have changed the device size.
630 int drbd_bm_resize(struct drbd_device *device, sector_t capacity, int set_new_bits)
632 struct drbd_bitmap *b = device->bitmap;
639 if (!expect(device, b))
642 drbd_bm_lock(device, "resize", BM_LOCKED_MASK);
644 drbd_info(device, "drbd_bm_resize called with capacity == %llu\n",
675 if (get_ldev(device)) {
676 u64 bits_on_disk = drbd_md_on_disk_bits(device->ldev);
677 put_ldev(device);
679 drbd_info(device, "bits = %lu\n", bits);
680 drbd_info(device, "bits_on_disk = %llu\n", bits_on_disk);
689 D_ASSERT(device, b->bm_pages != NULL);
692 if (drbd_insert_fault(device, DRBD_FAULT_BM_ALLOC))
739 drbd_info(device, "resync bitmap: bits=%lu words=%lu pages=%lu\n", bits, words, want);
742 drbd_bm_unlock(device);
754 unsigned long _drbd_bm_total_weight(struct drbd_device *device)
756 struct drbd_bitmap *b = device->bitmap;
760 if (!expect(device, b))
762 if (!expect(device, b->bm_pages))
772 unsigned long drbd_bm_total_weight(struct drbd_device *device)
776 if (!get_ldev_if_state(device, D_NEGOTIATING))
778 s = _drbd_bm_total_weight(device);
779 put_ldev(device);
783 size_t drbd_bm_words(struct drbd_device *device)
785 struct drbd_bitmap *b = device->bitmap;
786 if (!expect(device, b))
788 if (!expect(device, b->bm_pages))
794 unsigned long drbd_bm_bits(struct drbd_device *device)
796 struct drbd_bitmap *b = device->bitmap;
797 if (!expect(device, b))
808 void drbd_bm_merge_lel(struct drbd_device *device, size_t offset, size_t number,
811 struct drbd_bitmap *b = device->bitmap;
819 if (!expect(device, b))
821 if (!expect(device, b->bm_pages))
857 void drbd_bm_get_lel(struct drbd_device *device, size_t offset, size_t number,
860 struct drbd_bitmap *b = device->bitmap;
866 if (!expect(device, b))
868 if (!expect(device, b->bm_pages))
875 drbd_err(device, "offset=%lu number=%lu bm_words=%lu\n",
894 void drbd_bm_set_all(struct drbd_device *device)
896 struct drbd_bitmap *b = device->bitmap;
897 if (!expect(device, b))
899 if (!expect(device, b->bm_pages))
910 void drbd_bm_clear_all(struct drbd_device *device)
912 struct drbd_bitmap *b = device->bitmap;
913 if (!expect(device, b))
915 if (!expect(device, b->bm_pages))
929 spin_lock_irqsave(&ctx->device->resource->req_lock, flags);
931 spin_unlock_irqrestore(&ctx->device->resource->req_lock, flags);
932 put_ldev(ctx->device);
940 struct drbd_device *device = ctx->device;
941 struct drbd_bitmap *b = device->bitmap;
946 drbd_warn(device, "bitmap page idx %u changed during IO!\n", idx);
956 drbd_err(device, "IO ERROR %d on bitmap page idx %u\n",
960 dynamic_drbd_dbg(device, "bitmap page idx %u completed\n", idx);
963 bm_page_unlock_io(device, idx);
972 wake_up(&device->misc_wait);
992 struct drbd_device *device = ctx->device;
994 struct drbd_bitmap *b = device->bitmap;
1002 first_bm_sect = device->ldev->md.md_offset + device->ldev->md.bm_offset;
1006 * flexible external meta data device,
1008 last_bm_sect = drbd_md_last_bitmap_sector(device->ldev);
1017 drbd_err(device, "Invalid offset during on-disk bitmap access: "
1024 wake_up(&device->misc_wait);
1031 bm_page_lock_io(device, page_nr);
1043 bio = bio_alloc_bioset(device->ldev->md_bdev, 1, op, GFP_NOIO,
1050 if (drbd_insert_fault(device, (op == REQ_OP_WRITE) ? DRBD_FAULT_MD_WR : DRBD_FAULT_MD_RD)) {
1056 atomic_add(len >> 9, &device->rs_sect_ev);
1063 static int bm_rw(struct drbd_device *device, const unsigned int flags, unsigned lazy_writeout_upper_idx) __must_hold(local)
1066 struct drbd_bitmap *b = device->bitmap;
1086 .device = device,
1095 if (!get_ldev_if_state(device, D_ATTACHING)) { /* put is in drbd_bm_aio_ctx_destroy() */
1096 drbd_err(device, "ASSERT FAILED: get_ldev_if_state() == 1 in bm_rw()\n");
1101 drbd_adm_attach(), after device->ldev was assigned. */
1106 spin_lock_irq(&device->resource->req_lock);
1107 list_add_tail(&ctx->list, &device->pending_bitmap_io);
1108 spin_unlock_irq(&device->resource->req_lock);
1148 dynamic_drbd_dbg(device, "skipped bm write for idx %u\n", i);
1155 dynamic_drbd_dbg(device, "skipped bm lazy write for idx %u\n", i);
1174 wait_until_done_or_force_detached(device, device->ldev, &ctx->done);
1182 drbd_info(device, "bitmap %s of %u pages took %u ms\n",
1189 drbd_alert(device, "we had at least one MD IO ERROR during bitmap IO\n");
1190 drbd_chk_io_error(device, 1, DRBD_META_IO_ERROR);
1200 drbd_info(device, "recounting of set bits took additional %lu jiffies\n",
1206 drbd_info(device, "%s (%lu bits) marked out-of-sync by on disk bit-map.\n",
1215 * @device: DRBD device.
1217 int drbd_bm_read(struct drbd_device *device,
1221 return bm_rw(device, BM_AIO_READ, 0);
1226 * @device: DRBD device.
1230 int drbd_bm_write(struct drbd_device *device,
1233 return bm_rw(device, 0, 0);
1238 * @device: DRBD device.
1242 int drbd_bm_write_all(struct drbd_device *device,
1245 return bm_rw(device, BM_AIO_WRITE_ALL_PAGES, 0);
1250 * @device: DRBD device.
1253 int drbd_bm_write_lazy(struct drbd_device *device, unsigned upper_idx) __must_hold(local)
1255 return bm_rw(device, BM_AIO_COPY_PAGES, upper_idx);
1260 * @device: DRBD device.
1269 int drbd_bm_write_copy_pages(struct drbd_device *device,
1272 return bm_rw(device, BM_AIO_COPY_PAGES, 0);
1277 * @device: DRBD device.
1279 int drbd_bm_write_hinted(struct drbd_device *device) __must_hold(local)
1281 return bm_rw(device, BM_AIO_WRITE_HINTED | BM_AIO_COPY_PAGES, 0);
1292 static unsigned long __bm_find_next(struct drbd_device *device, unsigned long bm_fo,
1295 struct drbd_bitmap *b = device->bitmap;
1302 drbd_err(device, "bm_fo=%lu bm_bits=%lu\n", bm_fo, b->bm_bits);
1332 static unsigned long bm_find_next(struct drbd_device *device,
1335 struct drbd_bitmap *b = device->bitmap;
1338 if (!expect(device, b))
1340 if (!expect(device, b->bm_pages))
1345 bm_print_lock_info(device);
1347 i = __bm_find_next(device, bm_fo, find_zero_bit);
1353 unsigned long drbd_bm_find_next(struct drbd_device *device, unsigned long bm_fo)
1355 return bm_find_next(device, bm_fo, 0);
1360 unsigned long drbd_bm_find_next_zero(struct drbd_device *device, unsigned long bm_fo)
1362 return bm_find_next(device, bm_fo, 1);
1368 unsigned long _drbd_bm_find_next(struct drbd_device *device, unsigned long bm_fo)
1370 /* WARN_ON(!(BM_DONT_SET & device->b->bm_flags)); */
1371 return __bm_find_next(device, bm_fo, 0);
1374 unsigned long _drbd_bm_find_next_zero(struct drbd_device *device, unsigned long bm_fo)
1376 /* WARN_ON(!(BM_DONT_SET & device->b->bm_flags)); */
1377 return __bm_find_next(device, bm_fo, 1);
1386 static int __bm_change_bits_to(struct drbd_device *device, const unsigned long s,
1389 struct drbd_bitmap *b = device->bitmap;
1397 drbd_err(device, "ASSERT FAILED: bit_s=%lu bit_e=%lu bm_bits=%lu\n",
1435 static int bm_change_bits_to(struct drbd_device *device, const unsigned long s,
1439 struct drbd_bitmap *b = device->bitmap;
1442 if (!expect(device, b))
1444 if (!expect(device, b->bm_pages))
1449 bm_print_lock_info(device);
1451 c = __bm_change_bits_to(device, s, e, val);
1458 int drbd_bm_set_bits(struct drbd_device *device, const unsigned long s, const unsigned long e)
1460 return bm_change_bits_to(device, s, e, 1);
1464 int drbd_bm_clear_bits(struct drbd_device *device, const unsigned long s, const unsigned long e)
1466 return -bm_change_bits_to(device, s, e, 0);
1501 void _drbd_bm_set_bits(struct drbd_device *device, const unsigned long s, const unsigned long e)
1511 struct drbd_bitmap *b = device->bitmap;
1523 __bm_change_bits_to(device, s, e, 1);
1534 __bm_change_bits_to(device, s, sl-1, 1);
1546 bm_set_full_words_within_one_page(device->bitmap, page_nr, first_word, last_word);
1562 bm_set_full_words_within_one_page(device->bitmap, last_page, first_word, last_word);
1570 __bm_change_bits_to(device, el, e, 1);
1581 int drbd_bm_test_bit(struct drbd_device *device, const unsigned long bitnr)
1584 struct drbd_bitmap *b = device->bitmap;
1588 if (!expect(device, b))
1590 if (!expect(device, b->bm_pages))
1595 bm_print_lock_info(device);
1603 drbd_err(device, "bitnr=%lu > bm_bits=%lu\n", bitnr, b->bm_bits);
1612 int drbd_bm_count_bits(struct drbd_device *device, const unsigned long s, const unsigned long e)
1615 struct drbd_bitmap *b = device->bitmap;
1625 if (!expect(device, b))
1627 if (!expect(device, b->bm_pages))
1632 bm_print_lock_info(device);
1641 if (expect(device, bitnr < b->bm_bits))
1644 drbd_err(device, "bitnr=%lu bm_bits=%lu\n", bitnr, b->bm_bits);
1667 int drbd_bm_e_weight(struct drbd_device *device, unsigned long enr)
1669 struct drbd_bitmap *b = device->bitmap;
1674 if (!expect(device, b))
1676 if (!expect(device, b->bm_pages))
1681 bm_print_lock_info(device);
1693 drbd_err(device, "start offset (%d) too large in drbd_bm_e_weight\n", s);