Loading drivers/block/drbd/drbd_actlog.c +17 −13 Original line number Diff line number Diff line Loading @@ -919,6 +919,22 @@ static void drbd_try_clear_on_disk_bm(struct drbd_conf *mdev, sector_t sector, } } void drbd_advance_rs_marks(struct drbd_conf *mdev, unsigned long still_to_go) { unsigned long now = jiffies; unsigned long last = mdev->rs_mark_time[mdev->rs_last_mark]; int next = (mdev->rs_last_mark + 1) % DRBD_SYNC_MARKS; if (time_after_eq(now, last + DRBD_SYNC_MARK_STEP)) { if (mdev->rs_mark_left[mdev->rs_last_mark] != still_to_go && mdev->state.conn != C_PAUSED_SYNC_T && mdev->state.conn != C_PAUSED_SYNC_S) { mdev->rs_mark_time[next] = now; mdev->rs_mark_left[next] = still_to_go; mdev->rs_last_mark = next; } } } /* clear the bit corresponding to the piece of storage in question: * size byte of data starting from sector. Only clear a bits of the affected * one ore more _aligned_ BM_BLOCK_SIZE blocks. Loading Loading @@ -969,19 +985,7 @@ void __drbd_set_in_sync(struct drbd_conf *mdev, sector_t sector, int size, */ count = drbd_bm_clear_bits(mdev, sbnr, ebnr); if (count && get_ldev(mdev)) { unsigned long now = jiffies; unsigned long last = mdev->rs_mark_time[mdev->rs_last_mark]; int next = (mdev->rs_last_mark + 1) % DRBD_SYNC_MARKS; if (time_after_eq(now, last + DRBD_SYNC_MARK_STEP)) { unsigned long tw = drbd_bm_total_weight(mdev); if (mdev->rs_mark_left[mdev->rs_last_mark] != tw && mdev->state.conn != C_PAUSED_SYNC_T && mdev->state.conn != C_PAUSED_SYNC_S) { mdev->rs_mark_time[next] = now; mdev->rs_mark_left[next] = tw; mdev->rs_last_mark = next; } } drbd_advance_rs_marks(mdev, drbd_bm_total_weight(mdev)); spin_lock_irqsave(&mdev->al_lock, flags); drbd_try_clear_on_disk_bm(mdev, sector, count, TRUE); spin_unlock_irqrestore(&mdev->al_lock, flags); Loading Loading
drivers/block/drbd/drbd_actlog.c +17 −13 Original line number Diff line number Diff line Loading @@ -919,6 +919,22 @@ static void drbd_try_clear_on_disk_bm(struct drbd_conf *mdev, sector_t sector, } } void drbd_advance_rs_marks(struct drbd_conf *mdev, unsigned long still_to_go) { unsigned long now = jiffies; unsigned long last = mdev->rs_mark_time[mdev->rs_last_mark]; int next = (mdev->rs_last_mark + 1) % DRBD_SYNC_MARKS; if (time_after_eq(now, last + DRBD_SYNC_MARK_STEP)) { if (mdev->rs_mark_left[mdev->rs_last_mark] != still_to_go && mdev->state.conn != C_PAUSED_SYNC_T && mdev->state.conn != C_PAUSED_SYNC_S) { mdev->rs_mark_time[next] = now; mdev->rs_mark_left[next] = still_to_go; mdev->rs_last_mark = next; } } } /* clear the bit corresponding to the piece of storage in question: * size byte of data starting from sector. Only clear a bits of the affected * one ore more _aligned_ BM_BLOCK_SIZE blocks. Loading Loading @@ -969,19 +985,7 @@ void __drbd_set_in_sync(struct drbd_conf *mdev, sector_t sector, int size, */ count = drbd_bm_clear_bits(mdev, sbnr, ebnr); if (count && get_ldev(mdev)) { unsigned long now = jiffies; unsigned long last = mdev->rs_mark_time[mdev->rs_last_mark]; int next = (mdev->rs_last_mark + 1) % DRBD_SYNC_MARKS; if (time_after_eq(now, last + DRBD_SYNC_MARK_STEP)) { unsigned long tw = drbd_bm_total_weight(mdev); if (mdev->rs_mark_left[mdev->rs_last_mark] != tw && mdev->state.conn != C_PAUSED_SYNC_T && mdev->state.conn != C_PAUSED_SYNC_S) { mdev->rs_mark_time[next] = now; mdev->rs_mark_left[next] = tw; mdev->rs_last_mark = next; } } drbd_advance_rs_marks(mdev, drbd_bm_total_weight(mdev)); spin_lock_irqsave(&mdev->al_lock, flags); drbd_try_clear_on_disk_bm(mdev, sector, count, TRUE); spin_unlock_irqrestore(&mdev->al_lock, flags); Loading