drbd: use the resync controller for online-verify requests as well
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
This commit is contained in:
parent
e65f440d47
commit
2649f0809f
4 changed files with 14 additions and 9 deletions
|
@ -1126,6 +1126,8 @@ int __drbd_set_state(struct drbd_conf *mdev,
|
||||||
mdev->rs_mark_time[i] = now;
|
mdev->rs_mark_time[i] = now;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
drbd_rs_controller_reset(mdev);
|
||||||
|
|
||||||
if (ns.conn == C_VERIFY_S) {
|
if (ns.conn == C_VERIFY_S) {
|
||||||
dev_info(DEV, "Starting Online Verify from sector %llu\n",
|
dev_info(DEV, "Starting Online Verify from sector %llu\n",
|
||||||
(unsigned long long)mdev->ov_position);
|
(unsigned long long)mdev->ov_position);
|
||||||
|
|
|
@ -154,7 +154,8 @@ static void drbd_syncer_progress(struct drbd_conf *mdev, struct seq_file *seq)
|
||||||
seq_printf_with_thousands_grouping(seq, dbdt);
|
seq_printf_with_thousands_grouping(seq, dbdt);
|
||||||
seq_printf(seq, ")");
|
seq_printf(seq, ")");
|
||||||
|
|
||||||
if (mdev->state.conn == C_SYNC_TARGET) {
|
if (mdev->state.conn == C_SYNC_TARGET ||
|
||||||
|
mdev->state.conn == C_VERIFY_S) {
|
||||||
if (mdev->c_sync_rate > 1000)
|
if (mdev->c_sync_rate > 1000)
|
||||||
seq_printf(seq, " want: %d,%03d",
|
seq_printf(seq, " want: %d,%03d",
|
||||||
mdev->c_sync_rate / 1000, mdev->c_sync_rate % 1000);
|
mdev->c_sync_rate / 1000, mdev->c_sync_rate % 1000);
|
||||||
|
|
|
@ -1883,8 +1883,12 @@ int drbd_rs_should_slow_down(struct drbd_conf *mdev)
|
||||||
|
|
||||||
/* sync speed average over the last 2*DRBD_SYNC_MARK_STEP,
|
/* sync speed average over the last 2*DRBD_SYNC_MARK_STEP,
|
||||||
* approx. */
|
* approx. */
|
||||||
i = (mdev->rs_last_mark + DRBD_SYNC_MARKS-2) % DRBD_SYNC_MARKS;
|
i = (mdev->rs_last_mark + DRBD_SYNC_MARKS-1) % DRBD_SYNC_MARKS;
|
||||||
rs_left = drbd_bm_total_weight(mdev) - mdev->rs_failed;
|
|
||||||
|
if (mdev->state.conn == C_VERIFY_S || mdev->state.conn == C_VERIFY_T)
|
||||||
|
rs_left = mdev->ov_left;
|
||||||
|
else
|
||||||
|
rs_left = drbd_bm_total_weight(mdev) - mdev->rs_failed;
|
||||||
|
|
||||||
dt = ((long)jiffies - (long)mdev->rs_mark_time[i]) / HZ;
|
dt = ((long)jiffies - (long)mdev->rs_mark_time[i]) / HZ;
|
||||||
if (!dt)
|
if (!dt)
|
||||||
|
@ -1992,6 +1996,8 @@ static int receive_DataRequest(struct drbd_conf *mdev, enum drbd_packets cmd, un
|
||||||
D_ASSERT(mdev->agreed_pro_version >= 89);
|
D_ASSERT(mdev->agreed_pro_version >= 89);
|
||||||
e->w.cb = w_e_end_csum_rs_req;
|
e->w.cb = w_e_end_csum_rs_req;
|
||||||
} else if (cmd == P_OV_REPLY) {
|
} else if (cmd == P_OV_REPLY) {
|
||||||
|
/* track progress, we may need to throttle */
|
||||||
|
atomic_add(size >> 9, &mdev->rs_sect_in);
|
||||||
e->w.cb = w_e_end_ov_reply;
|
e->w.cb = w_e_end_ov_reply;
|
||||||
dec_rs_pending(mdev);
|
dec_rs_pending(mdev);
|
||||||
/* drbd_rs_begin_io done when we sent this request,
|
/* drbd_rs_begin_io done when we sent this request,
|
||||||
|
|
|
@ -708,11 +708,7 @@ static int w_make_ov_request(struct drbd_conf *mdev, struct drbd_work *w, int ca
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
number = SLEEP_TIME*mdev->sync_conf.rate / ((BM_BLOCK_SIZE/1024)*HZ);
|
number = drbd_rs_number_requests(mdev);
|
||||||
if (atomic_read(&mdev->rs_pending_cnt) > number)
|
|
||||||
goto requeue;
|
|
||||||
|
|
||||||
number -= atomic_read(&mdev->rs_pending_cnt);
|
|
||||||
|
|
||||||
sector = mdev->ov_position;
|
sector = mdev->ov_position;
|
||||||
for (i = 0; i < number; i++) {
|
for (i = 0; i < number; i++) {
|
||||||
|
@ -741,11 +737,11 @@ static int w_make_ov_request(struct drbd_conf *mdev, struct drbd_work *w, int ca
|
||||||
mdev->ov_position = sector;
|
mdev->ov_position = sector;
|
||||||
|
|
||||||
requeue:
|
requeue:
|
||||||
|
mdev->rs_in_flight += (i << (BM_BLOCK_SHIFT - 9));
|
||||||
mod_timer(&mdev->resync_timer, jiffies + SLEEP_TIME);
|
mod_timer(&mdev->resync_timer, jiffies + SLEEP_TIME);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int w_ov_finished(struct drbd_conf *mdev, struct drbd_work *w, int cancel)
|
int w_ov_finished(struct drbd_conf *mdev, struct drbd_work *w, int cancel)
|
||||||
{
|
{
|
||||||
kfree(w);
|
kfree(w);
|
||||||
|
|
Loading…
Add table
Reference in a new issue