555
struct drbd_atodb_wait {
557
struct completion io_done;
558
struct drbd_conf *mdev;
562
STATIC BIO_ENDIO_TYPE atodb_endio BIO_ENDIO_ARGS(struct bio *bio, int error)
564
struct drbd_atodb_wait *wc = bio->bi_private;
565
struct drbd_conf *mdev = wc->mdev;
567
int uptodate = bio_flagged(bio, BIO_UPTODATE);
570
/* strange behavior of some lower level drivers...
571
* fail the request by clearing the uptodate flag,
572
* but do not return any error?! */
573
if (!error && !uptodate)
576
drbd_chk_io_error(mdev, error, TRUE);
577
if (error && wc->error == 0)
580
if (atomic_dec_and_test(&wc->count))
581
complete(&wc->io_done);
583
page = bio->bi_io_vec[0].bv_page;
593
#define S2W(s) ((s)<<(BM_EXT_SHIFT-BM_BLOCK_SHIFT-LN2_BPL))
595
/* activity log to on disk bitmap -- prepare bio unless that sector
596
* is already covered by previously prepared bios */
597
STATIC int atodb_prepare_unless_covered(struct drbd_conf *mdev,
600
struct drbd_atodb_wait *wc) __must_hold(local)
604
sector_t on_disk_sector;
605
unsigned int page_offset = PAGE_SIZE;
610
/* We always write aligned, full 4k blocks,
611
* so we can ignore the logical_block_size (for now) */
613
on_disk_sector = enr + mdev->ldev->md.md_offset
614
+ mdev->ldev->md.bm_offset;
616
D_ASSERT(!(on_disk_sector & 7U));
618
/* Check if that enr is already covered by an already created bio.
619
* Caution, bios[] is not NULL terminated,
620
* but only initialized to all NULL.
621
* For completely scattered activity log,
622
* the last invocation iterates over all bios,
623
* and finds the last NULL entry.
625
while ((bio = bios[i])) {
626
if (bio->bi_sector == on_disk_sector)
630
/* bios[i] == NULL, the next not yet used slot */
632
/* GFP_KERNEL, we are not in the write-out path */
633
bio = bio_alloc(GFP_KERNEL, 1);
638
const struct bio_vec *prev_bv = bios[i-1]->bi_io_vec;
639
page_offset = prev_bv->bv_offset + prev_bv->bv_len;
640
page = prev_bv->bv_page;
642
if (page_offset == PAGE_SIZE) {
643
page = alloc_page(__GFP_HIGHMEM);
652
drbd_bm_get_lel(mdev, offset,
653
min_t(size_t, S2W(8), drbd_bm_words(mdev) - offset),
654
kmap(page) + page_offset);
657
bio->bi_private = wc;
658
bio->bi_end_io = atodb_endio;
659
bio->bi_bdev = mdev->ldev->md_bdev;
660
bio->bi_sector = on_disk_sector;
662
if (bio_add_page(bio, page, 4096, page_offset) != 4096)
665
atomic_inc(&wc->count);
666
/* we already know that we may do this...
667
* get_ldev_if_state(mdev,D_ATTACHING);
668
* just get the extra reference, so that the local_cnt reflects
669
* the number of pending IO requests DRBD at its backing device.
671
atomic_inc(&mdev->local_cnt);
686
* drbd_al_to_on_disk_bm() - * Writes bitmap parts covered by active AL extents
687
* @mdev: DRBD device.
689
* Called when we detach (unconfigure) local storage,
690
* or when we go from R_PRIMARY to R_SECONDARY role.
692
void drbd_al_to_on_disk_bm(struct drbd_conf *mdev)
697
struct drbd_atodb_wait wc;
699
ERR_IF (!get_ldev_if_state(mdev, D_ATTACHING))
700
return; /* sorry, I don't have any act_log etc... */
702
wait_event(mdev->al_wait, lc_try_lock(mdev->act_log));
704
nr_elements = mdev->act_log->nr_elements;
706
/* GFP_KERNEL, we are not in anyone's write-out path */
707
bios = kzalloc(sizeof(struct bio *) * nr_elements, GFP_KERNEL);
709
goto submit_one_by_one;
711
atomic_set(&wc.count, 0);
712
init_completion(&wc.io_done);
716
for (i = 0; i < nr_elements; i++) {
717
enr = lc_element_by_index(mdev->act_log, i)->lc_number;
720
/* next statement also does atomic_inc wc.count and local_cnt */
721
if (atodb_prepare_unless_covered(mdev, bios,
722
enr/AL_EXT_PER_BM_SECT,
724
goto free_bios_submit_one_by_one;
727
/* unnecessary optimization? */
728
lc_unlock(mdev->act_log);
729
wake_up(&mdev->al_wait);
731
/* all prepared, submit them */
732
for (i = 0; i < nr_elements; i++) {
735
if (FAULT_ACTIVE(mdev, DRBD_FAULT_MD_WR)) {
736
bios[i]->bi_rw = WRITE;
737
bio_endio(bios[i], -EIO);
739
submit_bio(WRITE, bios[i]);
743
drbd_blk_run_queue(bdev_get_queue(mdev->ldev->md_bdev));
745
/* always (try to) flush bitmap to stable storage */
748
/* In case we did not submit a single IO do not wait for
749
* them to complete. ( Because we would wait forever here. )
751
* In case we had IOs and they are already complete, there
752
* is not point in waiting anyways.
753
* Therefore this if () ... */
754
if (atomic_read(&wc.count))
755
wait_for_completion(&wc.io_done);
762
free_bios_submit_one_by_one:
763
/* free everything by calling the endio callback directly. */
764
for (i = 0; i < nr_elements && bios[i]; i++)
765
bio_endio(bios[i], 0);
770
dev_warn(DEV, "Using the slow drbd_al_to_on_disk_bm()\n");
772
for (i = 0; i < mdev->act_log->nr_elements; i++) {
773
enr = lc_element_by_index(mdev->act_log, i)->lc_number;
776
/* Really slow: if we have al-extents 16..19 active,
777
* sector 4 will be written four times! Synchronous! */
778
drbd_bm_write_sect(mdev, enr/AL_EXT_PER_BM_SECT);
781
lc_unlock(mdev->act_log);
782
wake_up(&mdev->al_wait);
787
592
* drbd_al_apply_to_bm() - Sets the bitmap to diry(1) where covered ba active AL extents
788
593
* @mdev: DRBD device.
1027
846
count = drbd_bm_clear_bits(mdev, sbnr, ebnr);
1028
847
if (count && get_ldev(mdev)) {
1029
unsigned long now = jiffies;
1030
unsigned long last = mdev->rs_mark_time[mdev->rs_last_mark];
1031
int next = (mdev->rs_last_mark + 1) % DRBD_SYNC_MARKS;
1032
if (time_after_eq(now, last + DRBD_SYNC_MARK_STEP)) {
1033
unsigned long tw = drbd_bm_total_weight(mdev);
1034
if (mdev->rs_mark_left[mdev->rs_last_mark] != tw &&
1035
mdev->state.conn != C_PAUSED_SYNC_T &&
1036
mdev->state.conn != C_PAUSED_SYNC_S) {
1037
mdev->rs_mark_time[next] = now;
1038
mdev->rs_mark_left[next] = tw;
1039
mdev->rs_last_mark = next;
848
drbd_advance_rs_marks(mdev, drbd_bm_total_weight(mdev));
1042
849
spin_lock_irqsave(&mdev->al_lock, flags);
1043
drbd_try_clear_on_disk_bm(mdev, sector, count, TRUE);
850
drbd_try_clear_on_disk_bm(mdev, sector, count, true);
1044
851
spin_unlock_irqrestore(&mdev->al_lock, flags);
1046
853
/* just wake_up unconditional now, various lc_chaged(),
1056
863
* this is intended to set one request worth of data out of sync.
1057
864
* affects at least 1 bit,
1058
* and at most 1+DRBD_MAX_SEGMENT_SIZE/BM_BLOCK_SIZE bits.
865
* and at most 1+DRBD_MAX_BIO_SIZE/BM_BLOCK_SIZE bits.
1060
867
* called by tl_clear and drbd_send_dblock (==drbd_make_request).
1061
868
* so this can be _any_ process.
1063
void __drbd_set_out_of_sync(struct drbd_conf *mdev, sector_t sector, int size,
870
int __drbd_set_out_of_sync(struct drbd_conf *mdev, sector_t sector, int size,
1064
871
const char *file, const unsigned int line)
1066
873
unsigned long sbnr, ebnr, lbnr, flags;
1067
874
sector_t esector, nr_sectors;
1068
unsigned int enr, count;
875
unsigned int enr, count = 0;
1069
876
struct lc_element *e;
1071
if (size <= 0 || (size & 0x1ff) != 0 || size > DRBD_MAX_SEGMENT_SIZE) {
878
if (size <= 0 || (size & 0x1ff) != 0 || size > DRBD_MAX_BIO_SIZE) {
1072
879
dev_err(DEV, "sector: %llus, size: %d\n",
1073
880
(unsigned long long)sector, size);
1077
884
if (!get_ldev(mdev))
1078
return; /* no disk, no metadata, no bitmap to set bits in */
885
return 0; /* no disk, no metadata, no bitmap to set bits in */
1080
887
nr_sectors = drbd_get_capacity(mdev->this_bdev);
1081
888
esector = sector + (size >> 9) - 1;