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: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
This commit is contained in:
Родитель
4c63f5646e
Коммит
2652561886
|
@ -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)
|
||||||
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)
|
||||||
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 @@ out:
|
||||||
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);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче