Commit 26525618 authored by Lars Ellenberg's avatar Lars Ellenberg Committed by Philipp Reisner

drbd: only reset online-verify start sector if verify completed

For network hickups during online-verify, on the next verify
triggered, we by default want to resume where it left off.

After any replication link interruption, there will be a (possibly
empty) resync.  Do not reset online-verify start sector if some resync
completed, that would defeats the purpose.

Only reset the start sector once a verify run is completed.
Signed-off-by: default avatarPhilipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: default avatarLars Ellenberg <lars.ellenberg@linbit.com>
parent 4c63f564
...@@ -782,6 +782,7 @@ int drbd_resync_finished(struct drbd_conf *mdev) ...@@ -782,6 +782,7 @@ int drbd_resync_finished(struct drbd_conf *mdev)
union drbd_state os, ns; union drbd_state os, ns;
struct drbd_work *w; struct drbd_work *w;
char *khelper_cmd = NULL; char *khelper_cmd = NULL;
int verify_done = 0;
/* Remove all elements from the resync LRU. Since future actions /* Remove all elements from the resync LRU. Since future actions
* might set bits in the (main) bitmap, then the entries in the * might set bits in the (main) bitmap, then the entries in the
...@@ -818,6 +819,8 @@ int drbd_resync_finished(struct drbd_conf *mdev) ...@@ -818,6 +819,8 @@ int drbd_resync_finished(struct drbd_conf *mdev)
spin_lock_irq(&mdev->req_lock); spin_lock_irq(&mdev->req_lock);
os = mdev->state; os = mdev->state;
verify_done = (os.conn == C_VERIFY_S || os.conn == C_VERIFY_T);
/* This protects us against multiple calls (that can happen in the presence /* This protects us against multiple calls (that can happen in the presence
of application IO), and against connectivity loss just before we arrive here. */ of application IO), and against connectivity loss just before we arrive here. */
if (os.conn <= C_CONNECTED) if (os.conn <= C_CONNECTED)
...@@ -827,8 +830,7 @@ int drbd_resync_finished(struct drbd_conf *mdev) ...@@ -827,8 +830,7 @@ int drbd_resync_finished(struct drbd_conf *mdev)
ns.conn = C_CONNECTED; ns.conn = C_CONNECTED;
dev_info(DEV, "%s done (total %lu sec; paused %lu sec; %lu K/sec)\n", dev_info(DEV, "%s done (total %lu sec; paused %lu sec; %lu K/sec)\n",
(os.conn == C_VERIFY_S || os.conn == C_VERIFY_T) ? verify_done ? "Online verify " : "Resync",
"Online verify " : "Resync",
dt + mdev->rs_paused, mdev->rs_paused, dbdt); dt + mdev->rs_paused, mdev->rs_paused, dbdt);
n_oos = drbd_bm_total_weight(mdev); n_oos = drbd_bm_total_weight(mdev);
...@@ -905,7 +907,8 @@ int drbd_resync_finished(struct drbd_conf *mdev) ...@@ -905,7 +907,8 @@ int drbd_resync_finished(struct drbd_conf *mdev)
mdev->rs_total = 0; mdev->rs_total = 0;
mdev->rs_failed = 0; mdev->rs_failed = 0;
mdev->rs_paused = 0; mdev->rs_paused = 0;
mdev->ov_start_sector = 0; if (verify_done)
mdev->ov_start_sector = 0;
drbd_md_sync(mdev); drbd_md_sync(mdev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment