From cab2179c6ceea943b45dcfc99a54e14fd725a082 Mon Sep 17 00:00:00 2001 From: Simon Graham Date: Fri, 21 Dec 2007 22:28:24 -0500 Subject: [PATCH] Revert "make resync more robust, don't reset find bit offset too early." This reverts commit 3a57119417c46c51dd4bc720ab7dbf14228f05bb. The change caused syncing to stall if pased/resumed quickly --- drbd/drbd_bitmap.c | 4 ++-- drbd/drbd_main.c | 12 ++++-------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/drbd/drbd_bitmap.c b/drbd/drbd_bitmap.c index b9309a3..6a7e4ae 100644 --- a/drbd/drbd_bitmap.c +++ b/drbd/drbd_bitmap.c @@ -874,7 +874,7 @@ unsigned long drbd_bm_find_next(drbd_dev *mdev) } if (i >= b->bm_bits) { i = -1UL; - /* leave b->bm_fo unchanged. */ + b->bm_fo = 0; } else { b->bm_fo = i+1; } @@ -898,7 +898,7 @@ void drbd_bm_set_find(drbd_dev *mdev, unsigned long i) int drbd_bm_rs_done(drbd_dev *mdev) { - return (mdev->bitmap->bm_fo >= mdev->bitmap->bm_bits); + return mdev->bitmap->bm_fo == 0; } /* returns number of bits actually changed. diff --git a/drbd/drbd_main.c b/drbd/drbd_main.c index 1430794..98a1c63 100644 --- a/drbd/drbd_main.c +++ b/drbd/drbd_main.c @@ -784,14 +784,10 @@ int _drbd_set_state(drbd_dev* mdev, drbd_state_t ns,enum chg_state_flags flags) (ns.conn == SyncTarget || ns.conn == SyncSource) ) { INFO("Syncer continues.\n"); mdev->rs_paused += (long)jiffies-(long)mdev->rs_mark_time; - if (ns.conn == SyncTarget) { - if (!test_bit(STOP_SYNC_TIMER,&mdev->flags)) { - mod_timer(&mdev->resync_timer,jiffies); - } - /* This if (!test_bit) is only needed for the case - that a device that has ceased to used its timer, - i.e. it is already in drbd_resync_finished() gets - paused and resumed. */ + if( ns.conn == SyncTarget ) { + D_ASSERT(!test_bit(STOP_SYNC_TIMER,&mdev->flags)); + clear_bit(STOP_SYNC_TIMER,&mdev->flags); + mod_timer(&mdev->resync_timer,jiffies); } } -- 1.5.4.rc1