drbd: improve online-verify progress tracking
For a partial (resumed) online-verify, initialize rs_total not to total bits, but to number of bits to check in this run, to match the meaning rs_total has for actual resync. Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
This commit is contained in:
parent
2652561886
commit
30b743a2d5
|
@ -961,6 +961,10 @@ static union drbd_state sanitize_state(struct drbd_conf *mdev, union drbd_state
|
|||
/* helper for __drbd_set_state */
|
||||
static void set_ov_position(struct drbd_conf *mdev, enum drbd_conns cs)
|
||||
{
|
||||
if (mdev->agreed_pro_version < 90)
|
||||
mdev->ov_start_sector = 0;
|
||||
mdev->rs_total = drbd_bm_bits(mdev);
|
||||
mdev->ov_position = 0;
|
||||
if (cs == C_VERIFY_T) {
|
||||
/* starting online verify from an arbitrary position
|
||||
* does not fit well into the existing protocol.
|
||||
|
@ -970,11 +974,15 @@ static void set_ov_position(struct drbd_conf *mdev, enum drbd_conns cs)
|
|||
mdev->ov_start_sector = ~(sector_t)0;
|
||||
} else {
|
||||
unsigned long bit = BM_SECT_TO_BIT(mdev->ov_start_sector);
|
||||
if (bit >= mdev->rs_total)
|
||||
if (bit >= mdev->rs_total) {
|
||||
mdev->ov_start_sector =
|
||||
BM_BIT_TO_SECT(mdev->rs_total - 1);
|
||||
mdev->rs_total = 1;
|
||||
} else
|
||||
mdev->rs_total -= bit;
|
||||
mdev->ov_position = mdev->ov_start_sector;
|
||||
}
|
||||
mdev->ov_left = mdev->rs_total;
|
||||
}
|
||||
|
||||
static void drbd_resume_al(struct drbd_conf *mdev)
|
||||
|
@ -1081,7 +1089,7 @@ int __drbd_set_state(struct drbd_conf *mdev,
|
|||
if ((os.conn == C_VERIFY_S || os.conn == C_VERIFY_T) &&
|
||||
ns.conn < C_CONNECTED) {
|
||||
mdev->ov_start_sector =
|
||||
BM_BIT_TO_SECT(mdev->rs_total - mdev->ov_left);
|
||||
BM_BIT_TO_SECT(drbd_bm_bits(mdev) - mdev->ov_left);
|
||||
dev_info(DEV, "Online Verify reached sector %llu\n",
|
||||
(unsigned long long)mdev->ov_start_sector);
|
||||
}
|
||||
|
@ -1106,14 +1114,7 @@ int __drbd_set_state(struct drbd_conf *mdev,
|
|||
unsigned long now = jiffies;
|
||||
int i;
|
||||
|
||||
mdev->ov_position = 0;
|
||||
mdev->rs_total = drbd_bm_bits(mdev);
|
||||
if (mdev->agreed_pro_version >= 90)
|
||||
set_ov_position(mdev, ns.conn);
|
||||
else
|
||||
mdev->ov_start_sector = 0;
|
||||
mdev->ov_left = mdev->rs_total
|
||||
- BM_SECT_TO_BIT(mdev->ov_position);
|
||||
set_ov_position(mdev, ns.conn);
|
||||
mdev->rs_start = now;
|
||||
mdev->rs_last_events = 0;
|
||||
mdev->rs_last_sect_ev = 0;
|
||||
|
@ -1121,7 +1122,7 @@ int __drbd_set_state(struct drbd_conf *mdev,
|
|||
mdev->ov_last_oos_start = 0;
|
||||
|
||||
for (i = 0; i < DRBD_SYNC_MARKS; i++) {
|
||||
mdev->rs_mark_left[i] = mdev->rs_total;
|
||||
mdev->rs_mark_left[i] = mdev->ov_left;
|
||||
mdev->rs_mark_time[i] = now;
|
||||
}
|
||||
|
||||
|
|
|
@ -239,12 +239,13 @@ static int drbd_seq_show(struct seq_file *seq, void *v)
|
|||
mdev->state.conn == C_SYNC_TARGET)
|
||||
drbd_syncer_progress(mdev, seq);
|
||||
|
||||
if (mdev->state.conn == C_VERIFY_S || mdev->state.conn == C_VERIFY_T)
|
||||
if (mdev->state.conn == C_VERIFY_S || mdev->state.conn == C_VERIFY_T) {
|
||||
unsigned long bm_bits = drbd_bm_bits(mdev);
|
||||
seq_printf(seq, "\t%3d%% %lu/%lu\n",
|
||||
(int)((mdev->rs_total-mdev->ov_left) /
|
||||
(mdev->rs_total/100+1)),
|
||||
mdev->rs_total - mdev->ov_left,
|
||||
mdev->rs_total);
|
||||
(int)((bm_bits-mdev->ov_left) /
|
||||
(bm_bits/100+1)),
|
||||
bm_bits - mdev->ov_left, bm_bits);
|
||||
}
|
||||
|
||||
if (proc_details >= 1 && get_ldev_if_state(mdev, D_FAILED)) {
|
||||
lc_seq_printf_stats(seq, mdev->resync);
|
||||
|
|
|
@ -2005,7 +2005,8 @@ static int receive_DataRequest(struct drbd_conf *mdev, enum drbd_packets cmd, un
|
|||
mdev->agreed_pro_version >= 90) {
|
||||
mdev->ov_start_sector = sector;
|
||||
mdev->ov_position = sector;
|
||||
mdev->ov_left = mdev->rs_total - BM_SECT_TO_BIT(sector);
|
||||
mdev->ov_left = drbd_bm_bits(mdev) - BM_SECT_TO_BIT(sector);
|
||||
mdev->rs_total = mdev->ov_left;
|
||||
dev_info(DEV, "Online Verify start sector: %llu\n",
|
||||
(unsigned long long)sector);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue