Lines Matching refs:device

95 void *drbd_md_get_buffer(struct drbd_device *device, const char *intent)  in drbd_md_get_buffer()  argument
99 wait_event(device->misc_wait, in drbd_md_get_buffer()
100 (r = atomic_cmpxchg(&device->md_io.in_use, 0, 1)) == 0 || in drbd_md_get_buffer()
101 device->state.disk <= D_FAILED); in drbd_md_get_buffer()
106 device->md_io.current_use = intent; in drbd_md_get_buffer()
107 device->md_io.start_jif = jiffies; in drbd_md_get_buffer()
108 device->md_io.submit_jif = device->md_io.start_jif - 1; in drbd_md_get_buffer()
109 return page_address(device->md_io.page); in drbd_md_get_buffer()
112 void drbd_md_put_buffer(struct drbd_device *device) in drbd_md_put_buffer() argument
114 if (atomic_dec_and_test(&device->md_io.in_use)) in drbd_md_put_buffer()
115 wake_up(&device->misc_wait); in drbd_md_put_buffer()
118 void wait_until_done_or_force_detached(struct drbd_device *device, struct drbd_backing_dev *bdev, in wait_until_done_or_force_detached() argument
130 dt = wait_event_timeout(device->misc_wait, in wait_until_done_or_force_detached()
131 *done || test_bit(FORCE_DETACH, &device->flags), dt); in wait_until_done_or_force_detached()
133 drbd_err(device, "meta-data IO operation timed out\n"); in wait_until_done_or_force_detached()
134 drbd_chk_io_error(device, 1, DRBD_FORCE_DETACH); in wait_until_done_or_force_detached()
138 static int _drbd_md_sync_page_io(struct drbd_device *device, in _drbd_md_sync_page_io() argument
147 device->md_io.done = 0; in _drbd_md_sync_page_io()
148 device->md_io.error = -ENODEV; in _drbd_md_sync_page_io()
150 if ((rw & WRITE) && !test_bit(MD_NO_FUA, &device->flags)) in _drbd_md_sync_page_io()
158 if (bio_add_page(bio, device->md_io.page, size, 0) != size) in _drbd_md_sync_page_io()
160 bio->bi_private = device; in _drbd_md_sync_page_io()
164 if (!(rw & WRITE) && device->state.disk == D_DISKLESS && device->ldev == NULL) in _drbd_md_sync_page_io()
167 else if (!get_ldev_if_state(device, D_ATTACHING)) { in _drbd_md_sync_page_io()
169 drbd_err(device, "ASSERT FAILED: get_ldev_if_state() == 1 in _drbd_md_sync_page_io()\n"); in _drbd_md_sync_page_io()
175 atomic_inc(&device->md_io.in_use); /* drbd_md_put_buffer() is in the completion handler */ in _drbd_md_sync_page_io()
176 device->md_io.submit_jif = jiffies; in _drbd_md_sync_page_io()
177 if (drbd_insert_fault(device, (rw & WRITE) ? DRBD_FAULT_MD_WR : DRBD_FAULT_MD_RD)) in _drbd_md_sync_page_io()
181 wait_until_done_or_force_detached(device, bdev, &device->md_io.done); in _drbd_md_sync_page_io()
183 err = device->md_io.error; in _drbd_md_sync_page_io()
190 int drbd_md_sync_page_io(struct drbd_device *device, struct drbd_backing_dev *bdev, in drbd_md_sync_page_io() argument
194 D_ASSERT(device, atomic_read(&device->md_io.in_use) == 1); in drbd_md_sync_page_io()
198 dynamic_drbd_dbg(device, "meta_data io: %s [%d]:%s(,%llus,%s) %pS\n", in drbd_md_sync_page_io()
205 drbd_alert(device, "%s [%d]:%s(,%llus,%s) out of range md access!\n", in drbd_md_sync_page_io()
209 err = _drbd_md_sync_page_io(device, bdev, sector, rw); in drbd_md_sync_page_io()
211 drbd_err(device, "drbd_md_sync_page_io(,%llus,%s) failed with error %d\n", in drbd_md_sync_page_io()
217 static struct bm_extent *find_active_resync_extent(struct drbd_device *device, unsigned int enr) in find_active_resync_extent() argument
220 tmp = lc_find(device->resync, enr/AL_EXT_PER_BM_SECT); in find_active_resync_extent()
229 static struct lc_element *_al_get(struct drbd_device *device, unsigned int enr, bool nonblock) in _al_get() argument
235 spin_lock_irq(&device->al_lock); in _al_get()
236 bm_ext = find_active_resync_extent(device, enr); in _al_get()
239 spin_unlock_irq(&device->al_lock); in _al_get()
241 wake_up(&device->al_wait); in _al_get()
245 al_ext = lc_try_get(device->act_log, enr); in _al_get()
247 al_ext = lc_get(device->act_log, enr); in _al_get()
248 spin_unlock_irq(&device->al_lock); in _al_get()
252 bool drbd_al_begin_io_fastpath(struct drbd_device *device, struct drbd_interval *i) in drbd_al_begin_io_fastpath() argument
259 D_ASSERT(device, (unsigned)(last - first) <= 1); in drbd_al_begin_io_fastpath()
260 D_ASSERT(device, atomic_read(&device->local_cnt) > 0); in drbd_al_begin_io_fastpath()
266 return _al_get(device, first, true); in drbd_al_begin_io_fastpath()
269 bool drbd_al_begin_io_prepare(struct drbd_device *device, struct drbd_interval *i) in drbd_al_begin_io_prepare() argument
278 D_ASSERT(device, first <= last); in drbd_al_begin_io_prepare()
279 D_ASSERT(device, atomic_read(&device->local_cnt) > 0); in drbd_al_begin_io_prepare()
283 wait_event(device->al_wait, in drbd_al_begin_io_prepare()
284 (al_ext = _al_get(device, enr, false)) != NULL); in drbd_al_begin_io_prepare()
291 static int al_write_transaction(struct drbd_device *device);
293 void drbd_al_begin_io_commit(struct drbd_device *device) in drbd_al_begin_io_commit() argument
300 wait_event(device->al_wait, in drbd_al_begin_io_commit()
301 device->act_log->pending_changes == 0 || in drbd_al_begin_io_commit()
302 (locked = lc_try_lock_for_transaction(device->act_log))); in drbd_al_begin_io_commit()
307 if (device->act_log->pending_changes) { in drbd_al_begin_io_commit()
311 write_al_updates = rcu_dereference(device->ldev->disk_conf)->al_updates; in drbd_al_begin_io_commit()
315 al_write_transaction(device); in drbd_al_begin_io_commit()
316 spin_lock_irq(&device->al_lock); in drbd_al_begin_io_commit()
321 lc_committed(device->act_log); in drbd_al_begin_io_commit()
322 spin_unlock_irq(&device->al_lock); in drbd_al_begin_io_commit()
324 lc_unlock(device->act_log); in drbd_al_begin_io_commit()
325 wake_up(&device->al_wait); in drbd_al_begin_io_commit()
332 void drbd_al_begin_io(struct drbd_device *device, struct drbd_interval *i) in drbd_al_begin_io() argument
334 if (drbd_al_begin_io_prepare(device, i)) in drbd_al_begin_io()
335 drbd_al_begin_io_commit(device); in drbd_al_begin_io()
338 int drbd_al_begin_io_nonblock(struct drbd_device *device, struct drbd_interval *i) in drbd_al_begin_io_nonblock() argument
340 struct lru_cache *al = device->act_log; in drbd_al_begin_io_nonblock()
349 D_ASSERT(device, first <= last); in drbd_al_begin_io_nonblock()
368 __set_bit(__LC_STARVING, &device->act_log->flags); in drbd_al_begin_io_nonblock()
375 tmp = lc_find(device->resync, enr/AL_EXT_PER_BM_SECT); in drbd_al_begin_io_nonblock()
391 al_ext = lc_get_cumulative(device->act_log, enr); in drbd_al_begin_io_nonblock()
393 drbd_info(device, "LOGIC BUG for enr=%u\n", enr); in drbd_al_begin_io_nonblock()
398 void drbd_al_complete_io(struct drbd_device *device, struct drbd_interval *i) in drbd_al_complete_io() argument
408 D_ASSERT(device, first <= last); in drbd_al_complete_io()
409 spin_lock_irqsave(&device->al_lock, flags); in drbd_al_complete_io()
412 extent = lc_find(device->act_log, enr); in drbd_al_complete_io()
414 drbd_err(device, "al_complete_io() called on inactive extent %u\n", enr); in drbd_al_complete_io()
417 lc_put(device->act_log, extent); in drbd_al_complete_io()
419 spin_unlock_irqrestore(&device->al_lock, flags); in drbd_al_complete_io()
420 wake_up(&device->al_wait); in drbd_al_complete_io()
441 static sector_t al_tr_number_to_on_disk_sector(struct drbd_device *device) in al_tr_number_to_on_disk_sector() argument
443 const unsigned int stripes = device->ldev->md.al_stripes; in al_tr_number_to_on_disk_sector()
444 const unsigned int stripe_size_4kB = device->ldev->md.al_stripe_size_4k; in al_tr_number_to_on_disk_sector()
447 unsigned int t = device->al_tr_number % (device->ldev->md.al_size_4k); in al_tr_number_to_on_disk_sector()
456 return device->ldev->md.md_offset + device->ldev->md.al_offset + t; in al_tr_number_to_on_disk_sector()
459 int al_write_transaction(struct drbd_device *device) in al_write_transaction() argument
469 if (!get_ldev(device)) { in al_write_transaction()
470 drbd_err(device, "disk is %s, cannot start al transaction\n", in al_write_transaction()
471 drbd_disk_str(device->state.disk)); in al_write_transaction()
476 if (device->state.disk < D_INCONSISTENT) { in al_write_transaction()
477 drbd_err(device, in al_write_transaction()
479 drbd_disk_str(device->state.disk)); in al_write_transaction()
480 put_ldev(device); in al_write_transaction()
485 buffer = drbd_md_get_buffer(device, __func__); in al_write_transaction()
487 drbd_err(device, "disk failed while waiting for md_io buffer\n"); in al_write_transaction()
488 put_ldev(device); in al_write_transaction()
494 buffer->tr_number = cpu_to_be32(device->al_tr_number); in al_write_transaction()
502 spin_lock_irq(&device->al_lock); in al_write_transaction()
503 list_for_each_entry(e, &device->act_log->to_be_changed, list) { in al_write_transaction()
511 drbd_bm_mark_for_writeout(device, in al_write_transaction()
515 spin_unlock_irq(&device->al_lock); in al_write_transaction()
524 buffer->context_size = cpu_to_be16(device->act_log->nr_elements); in al_write_transaction()
525 buffer->context_start_slot_nr = cpu_to_be16(device->al_tr_cycle); in al_write_transaction()
528 device->act_log->nr_elements - device->al_tr_cycle); in al_write_transaction()
530 unsigned idx = device->al_tr_cycle + i; in al_write_transaction()
531 extent_nr = lc_element_by_index(device->act_log, idx)->lc_number; in al_write_transaction()
537 device->al_tr_cycle += AL_CONTEXT_PER_TRANSACTION; in al_write_transaction()
538 if (device->al_tr_cycle >= device->act_log->nr_elements) in al_write_transaction()
539 device->al_tr_cycle = 0; in al_write_transaction()
541 sector = al_tr_number_to_on_disk_sector(device); in al_write_transaction()
546 if (drbd_bm_write_hinted(device)) in al_write_transaction()
551 write_al_updates = rcu_dereference(device->ldev->disk_conf)->al_updates; in al_write_transaction()
554 if (drbd_md_sync_page_io(device, device->ldev, sector, WRITE)) { in al_write_transaction()
556 drbd_chk_io_error(device, 1, DRBD_META_IO_ERROR); in al_write_transaction()
558 device->al_tr_number++; in al_write_transaction()
559 device->al_writ_cnt++; in al_write_transaction()
564 drbd_md_put_buffer(device); in al_write_transaction()
565 put_ldev(device); in al_write_transaction()
570 static int _try_lc_del(struct drbd_device *device, struct lc_element *al_ext) in _try_lc_del() argument
574 spin_lock_irq(&device->al_lock); in _try_lc_del()
577 lc_del(device->act_log, al_ext); in _try_lc_del()
578 spin_unlock_irq(&device->al_lock); in _try_lc_del()
592 void drbd_al_shrink(struct drbd_device *device) in drbd_al_shrink() argument
597 D_ASSERT(device, test_bit(__LC_LOCKED, &device->act_log->flags)); in drbd_al_shrink()
599 for (i = 0; i < device->act_log->nr_elements; i++) { in drbd_al_shrink()
600 al_ext = lc_element_by_index(device->act_log, i); in drbd_al_shrink()
603 wait_event(device->al_wait, _try_lc_del(device, al_ext)); in drbd_al_shrink()
606 wake_up(&device->al_wait); in drbd_al_shrink()
609 int drbd_initialize_al(struct drbd_device *device, void *buffer) in drbd_initialize_al() argument
612 struct drbd_md *md = &device->ldev->md; in drbd_initialize_al()
623 int err = drbd_md_sync_page_io(device, device->ldev, al_base + i * 8, WRITE); in drbd_initialize_al()
649 static bool update_rs_extent(struct drbd_device *device, in update_rs_extent() argument
655 D_ASSERT(device, atomic_read(&device->local_cnt)); in update_rs_extent()
665 e = lc_find(device->resync, enr); in update_rs_extent()
667 e = lc_get(device->resync, enr); in update_rs_extent()
678 drbd_warn(device, "BAD! enr=%u rs_left=%d " in update_rs_extent()
682 drbd_conn_str(device->state.conn)); in update_rs_extent()
690 ext->rs_left = drbd_bm_e_weight(device, enr); in update_rs_extent()
699 int rs_left = drbd_bm_e_weight(device, enr); in update_rs_extent()
701 drbd_warn(device, "changing resync lce: %d[%u;%02lx]" in update_rs_extent()
708 drbd_warn(device, "Kicking resync_lru element enr=%u " in update_rs_extent()
716 lc_committed(device->resync); in update_rs_extent()
719 lc_put(device->resync, &ext->lce); in update_rs_extent()
728 drbd_err(device, "lc_get() failed! locked=%d/%d flags=%lu\n", in update_rs_extent()
729 device->resync_locked, in update_rs_extent()
730 device->resync->nr_elements, in update_rs_extent()
731 device->resync->flags); in update_rs_extent()
736 void drbd_advance_rs_marks(struct drbd_device *device, unsigned long still_to_go) in drbd_advance_rs_marks() argument
739 unsigned long last = device->rs_mark_time[device->rs_last_mark]; in drbd_advance_rs_marks()
740 int next = (device->rs_last_mark + 1) % DRBD_SYNC_MARKS; in drbd_advance_rs_marks()
742 if (device->rs_mark_left[device->rs_last_mark] != still_to_go && in drbd_advance_rs_marks()
743 device->state.conn != C_PAUSED_SYNC_T && in drbd_advance_rs_marks()
744 device->state.conn != C_PAUSED_SYNC_S) { in drbd_advance_rs_marks()
745 device->rs_mark_time[next] = now; in drbd_advance_rs_marks()
746 device->rs_mark_left[next] = still_to_go; in drbd_advance_rs_marks()
747 device->rs_last_mark = next; in drbd_advance_rs_marks()
753 static bool lazy_bitmap_update_due(struct drbd_device *device) in lazy_bitmap_update_due() argument
755 return time_after(jiffies, device->rs_last_bcast + 2*HZ); in lazy_bitmap_update_due()
758 static void maybe_schedule_on_disk_bitmap_update(struct drbd_device *device, bool rs_done) in maybe_schedule_on_disk_bitmap_update() argument
761 set_bit(RS_DONE, &device->flags); in maybe_schedule_on_disk_bitmap_update()
763 else if (!lazy_bitmap_update_due(device)) in maybe_schedule_on_disk_bitmap_update()
766 drbd_device_post_work(device, RS_PROGRESS); in maybe_schedule_on_disk_bitmap_update()
769 static int update_sync_bits(struct drbd_device *device, in update_sync_bits() argument
794 c = drbd_bm_count_bits(device, sbnr, tbnr); in update_sync_bits()
796 c = drbd_bm_clear_bits(device, sbnr, tbnr); in update_sync_bits()
798 c = drbd_bm_set_bits(device, sbnr, tbnr); in update_sync_bits()
801 spin_lock_irqsave(&device->al_lock, flags); in update_sync_bits()
802 cleared += update_rs_extent(device, BM_BIT_TO_EXT(sbnr), c, mode); in update_sync_bits()
803 spin_unlock_irqrestore(&device->al_lock, flags); in update_sync_bits()
810 unsigned long still_to_go = drbd_bm_total_weight(device); in update_sync_bits()
811 bool rs_is_done = (still_to_go <= device->rs_failed); in update_sync_bits()
812 drbd_advance_rs_marks(device, still_to_go); in update_sync_bits()
814 maybe_schedule_on_disk_bitmap_update(device, rs_is_done); in update_sync_bits()
816 device->rs_failed += count; in update_sync_bits()
817 wake_up(&device->al_wait); in update_sync_bits()
829 int __drbd_change_sync(struct drbd_device *device, sector_t sector, int size, in __drbd_change_sync() argument
842 drbd_err(device, "%s: sector=%llus size=%d nonsense!\n", in __drbd_change_sync()
848 if (!get_ldev(device)) in __drbd_change_sync()
851 nr_sectors = drbd_get_capacity(device->this_bdev); in __drbd_change_sync()
878 count = update_sync_bits(device, sbnr, ebnr, mode); in __drbd_change_sync()
880 put_ldev(device); in __drbd_change_sync()
885 struct bm_extent *_bme_get(struct drbd_device *device, unsigned int enr) in _bme_get() argument
892 spin_lock_irq(&device->al_lock); in _bme_get()
893 if (device->resync_locked > device->resync->nr_elements/2) { in _bme_get()
894 spin_unlock_irq(&device->al_lock); in _bme_get()
897 e = lc_get(device->resync, enr); in _bme_get()
901 bm_ext->rs_left = drbd_bm_e_weight(device, enr); in _bme_get()
903 lc_committed(device->resync); in _bme_get()
907 device->resync_locked++; in _bme_get()
910 rs_flags = device->resync->flags; in _bme_get()
911 spin_unlock_irq(&device->al_lock); in _bme_get()
913 wake_up(&device->al_wait); in _bme_get()
917 drbd_warn(device, "Have to wait for element" in _bme_get()
925 static int _is_in_al(struct drbd_device *device, unsigned int enr) in _is_in_al() argument
929 spin_lock_irq(&device->al_lock); in _is_in_al()
930 rv = lc_is_used(device->act_log, enr); in _is_in_al()
931 spin_unlock_irq(&device->al_lock); in _is_in_al()
943 int drbd_rs_begin_io(struct drbd_device *device, sector_t sector) in drbd_rs_begin_io() argument
951 sig = wait_event_interruptible(device->al_wait, in drbd_rs_begin_io()
952 (bm_ext = _bme_get(device, enr))); in drbd_rs_begin_io()
960 sa = drbd_rs_c_min_rate_throttle(device); in drbd_rs_begin_io()
963 sig = wait_event_interruptible(device->al_wait, in drbd_rs_begin_io()
964 !_is_in_al(device, enr * AL_EXT_PER_BM_SECT + i) || in drbd_rs_begin_io()
968 spin_lock_irq(&device->al_lock); in drbd_rs_begin_io()
969 if (lc_put(device->resync, &bm_ext->lce) == 0) { in drbd_rs_begin_io()
971 device->resync_locked--; in drbd_rs_begin_io()
972 wake_up(&device->al_wait); in drbd_rs_begin_io()
974 spin_unlock_irq(&device->al_lock); in drbd_rs_begin_io()
995 int drbd_try_rs_begin_io(struct drbd_device *device, sector_t sector) in drbd_try_rs_begin_io() argument
1002 bool throttle = drbd_rs_should_slow_down(device, sector, true); in drbd_try_rs_begin_io()
1009 if (throttle && device->resync_wenr != enr) in drbd_try_rs_begin_io()
1012 spin_lock_irq(&device->al_lock); in drbd_try_rs_begin_io()
1013 if (device->resync_wenr != LC_FREE && device->resync_wenr != enr) { in drbd_try_rs_begin_io()
1027 e = lc_find(device->resync, device->resync_wenr); in drbd_try_rs_begin_io()
1030 D_ASSERT(device, !test_bit(BME_LOCKED, &bm_ext->flags)); in drbd_try_rs_begin_io()
1031 D_ASSERT(device, test_bit(BME_NO_WRITES, &bm_ext->flags)); in drbd_try_rs_begin_io()
1033 device->resync_wenr = LC_FREE; in drbd_try_rs_begin_io()
1034 if (lc_put(device->resync, &bm_ext->lce) == 0) { in drbd_try_rs_begin_io()
1036 device->resync_locked--; in drbd_try_rs_begin_io()
1038 wake_up(&device->al_wait); in drbd_try_rs_begin_io()
1040 drbd_alert(device, "LOGIC BUG\n"); in drbd_try_rs_begin_io()
1044 e = lc_try_get(device->resync, enr); in drbd_try_rs_begin_io()
1050 device->resync_locked++; in drbd_try_rs_begin_io()
1057 D_ASSERT(device, bm_ext->lce.refcnt > 0); in drbd_try_rs_begin_io()
1062 if (device->resync_locked > device->resync->nr_elements-3) in drbd_try_rs_begin_io()
1065 e = lc_get(device->resync, enr); in drbd_try_rs_begin_io()
1068 const unsigned long rs_flags = device->resync->flags; in drbd_try_rs_begin_io()
1070 drbd_warn(device, "Have to wait for element" in drbd_try_rs_begin_io()
1076 bm_ext->rs_left = drbd_bm_e_weight(device, enr); in drbd_try_rs_begin_io()
1078 lc_committed(device->resync); in drbd_try_rs_begin_io()
1079 wake_up(&device->al_wait); in drbd_try_rs_begin_io()
1080 D_ASSERT(device, test_bit(BME_LOCKED, &bm_ext->flags) == 0); in drbd_try_rs_begin_io()
1083 D_ASSERT(device, bm_ext->lce.refcnt == 1); in drbd_try_rs_begin_io()
1084 device->resync_locked++; in drbd_try_rs_begin_io()
1089 if (lc_is_used(device->act_log, al_enr+i)) in drbd_try_rs_begin_io()
1094 device->resync_wenr = LC_FREE; in drbd_try_rs_begin_io()
1095 spin_unlock_irq(&device->al_lock); in drbd_try_rs_begin_io()
1101 D_ASSERT(device, !test_bit(BME_LOCKED, &bm_ext->flags)); in drbd_try_rs_begin_io()
1102 D_ASSERT(device, test_bit(BME_NO_WRITES, &bm_ext->flags)); in drbd_try_rs_begin_io()
1104 device->resync_wenr = LC_FREE; in drbd_try_rs_begin_io()
1105 if (lc_put(device->resync, &bm_ext->lce) == 0) { in drbd_try_rs_begin_io()
1107 device->resync_locked--; in drbd_try_rs_begin_io()
1109 wake_up(&device->al_wait); in drbd_try_rs_begin_io()
1111 device->resync_wenr = enr; in drbd_try_rs_begin_io()
1113 spin_unlock_irq(&device->al_lock); in drbd_try_rs_begin_io()
1117 void drbd_rs_complete_io(struct drbd_device *device, sector_t sector) in drbd_rs_complete_io() argument
1124 spin_lock_irqsave(&device->al_lock, flags); in drbd_rs_complete_io()
1125 e = lc_find(device->resync, enr); in drbd_rs_complete_io()
1128 spin_unlock_irqrestore(&device->al_lock, flags); in drbd_rs_complete_io()
1130 drbd_err(device, "drbd_rs_complete_io() called, but extent not found\n"); in drbd_rs_complete_io()
1135 spin_unlock_irqrestore(&device->al_lock, flags); in drbd_rs_complete_io()
1136 drbd_err(device, "drbd_rs_complete_io(,%llu [=%u]) called, " in drbd_rs_complete_io()
1142 if (lc_put(device->resync, &bm_ext->lce) == 0) { in drbd_rs_complete_io()
1144 device->resync_locked--; in drbd_rs_complete_io()
1145 wake_up(&device->al_wait); in drbd_rs_complete_io()
1148 spin_unlock_irqrestore(&device->al_lock, flags); in drbd_rs_complete_io()
1155 void drbd_rs_cancel_all(struct drbd_device *device) in drbd_rs_cancel_all() argument
1157 spin_lock_irq(&device->al_lock); in drbd_rs_cancel_all()
1159 if (get_ldev_if_state(device, D_FAILED)) { /* Makes sure ->resync is there. */ in drbd_rs_cancel_all()
1160 lc_reset(device->resync); in drbd_rs_cancel_all()
1161 put_ldev(device); in drbd_rs_cancel_all()
1163 device->resync_locked = 0; in drbd_rs_cancel_all()
1164 device->resync_wenr = LC_FREE; in drbd_rs_cancel_all()
1165 spin_unlock_irq(&device->al_lock); in drbd_rs_cancel_all()
1166 wake_up(&device->al_wait); in drbd_rs_cancel_all()
1176 int drbd_rs_del_all(struct drbd_device *device) in drbd_rs_del_all() argument
1182 spin_lock_irq(&device->al_lock); in drbd_rs_del_all()
1184 if (get_ldev_if_state(device, D_FAILED)) { in drbd_rs_del_all()
1186 for (i = 0; i < device->resync->nr_elements; i++) { in drbd_rs_del_all()
1187 e = lc_element_by_index(device->resync, i); in drbd_rs_del_all()
1191 if (bm_ext->lce.lc_number == device->resync_wenr) { in drbd_rs_del_all()
1192 drbd_info(device, "dropping %u in drbd_rs_del_all, apparently" in drbd_rs_del_all()
1194 device->resync_wenr); in drbd_rs_del_all()
1195 D_ASSERT(device, !test_bit(BME_LOCKED, &bm_ext->flags)); in drbd_rs_del_all()
1196 D_ASSERT(device, test_bit(BME_NO_WRITES, &bm_ext->flags)); in drbd_rs_del_all()
1198 device->resync_wenr = LC_FREE; in drbd_rs_del_all()
1199 lc_put(device->resync, &bm_ext->lce); in drbd_rs_del_all()
1202 drbd_info(device, "Retrying drbd_rs_del_all() later. " in drbd_rs_del_all()
1204 put_ldev(device); in drbd_rs_del_all()
1205 spin_unlock_irq(&device->al_lock); in drbd_rs_del_all()
1208 D_ASSERT(device, !test_bit(BME_LOCKED, &bm_ext->flags)); in drbd_rs_del_all()
1209 D_ASSERT(device, !test_bit(BME_NO_WRITES, &bm_ext->flags)); in drbd_rs_del_all()
1210 lc_del(device->resync, &bm_ext->lce); in drbd_rs_del_all()
1212 D_ASSERT(device, device->resync->used == 0); in drbd_rs_del_all()
1213 put_ldev(device); in drbd_rs_del_all()
1215 spin_unlock_irq(&device->al_lock); in drbd_rs_del_all()
1216 wake_up(&device->al_wait); in drbd_rs_del_all()