aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/drbd/drbd_main.c
diff options
context:
space:
mode:
authorLars Ellenberg <lars.ellenberg@linbit.com>2010-08-11 17:40:24 -0400
committerPhilipp Reisner <philipp.reisner@linbit.com>2010-10-14 12:38:20 -0400
commit0f0601f4ea2f53cfd8bcae060fb03d9bbde070ec (patch)
tree42bcbd8edf48c9cee526893108cc69b4918a9f64 /drivers/block/drbd/drbd_main.c
parent80a40e439e5a3f30b0a6210a1add6d7c33392e54 (diff)
drbd: new configuration parameter c-min-rate
We now track the data rate of locally submitted resync related requests, and can thus detect non-resync activity on the lower level device. If the current sync rate is above c-min-rate, and the lower level device appears to be busy, we throttle the resyncer. Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block/drbd/drbd_main.c')
-rw-r--r--drivers/block/drbd/drbd_main.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index 1ff8418ae0f..db93eee7e54 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -1098,6 +1098,8 @@ int __drbd_set_state(struct drbd_conf *mdev,
1098 mdev->ov_left = mdev->rs_total 1098 mdev->ov_left = mdev->rs_total
1099 - BM_SECT_TO_BIT(mdev->ov_position); 1099 - BM_SECT_TO_BIT(mdev->ov_position);
1100 mdev->rs_start = now; 1100 mdev->rs_start = now;
1101 mdev->rs_last_events = 0;
1102 mdev->rs_last_sect_ev = 0;
1101 mdev->ov_last_oos_size = 0; 1103 mdev->ov_last_oos_size = 0;
1102 mdev->ov_last_oos_start = 0; 1104 mdev->ov_last_oos_start = 0;
1103 1105
@@ -2706,7 +2708,8 @@ static void drbd_set_defaults(struct drbd_conf *mdev)
2706 /* .c_plan_ahead = */ DRBD_C_PLAN_AHEAD_DEF, 2708 /* .c_plan_ahead = */ DRBD_C_PLAN_AHEAD_DEF,
2707 /* .c_delay_target = */ DRBD_C_DELAY_TARGET_DEF, 2709 /* .c_delay_target = */ DRBD_C_DELAY_TARGET_DEF,
2708 /* .c_fill_target = */ DRBD_C_FILL_TARGET_DEF, 2710 /* .c_fill_target = */ DRBD_C_FILL_TARGET_DEF,
2709 /* .c_max_rate = */ DRBD_C_MAX_RATE_DEF 2711 /* .c_max_rate = */ DRBD_C_MAX_RATE_DEF,
2712 /* .c_min_rate = */ DRBD_C_MIN_RATE_DEF
2710 }; 2713 };
2711 2714
2712 /* Have to use that way, because the layout differs between 2715 /* Have to use that way, because the layout differs between
@@ -2742,6 +2745,7 @@ void drbd_init_set_defaults(struct drbd_conf *mdev)
2742 atomic_set(&mdev->packet_seq, 0); 2745 atomic_set(&mdev->packet_seq, 0);
2743 atomic_set(&mdev->pp_in_use, 0); 2746 atomic_set(&mdev->pp_in_use, 0);
2744 atomic_set(&mdev->rs_sect_in, 0); 2747 atomic_set(&mdev->rs_sect_in, 0);
2748 atomic_set(&mdev->rs_sect_ev, 0);
2745 2749
2746 mutex_init(&mdev->md_io_mutex); 2750 mutex_init(&mdev->md_io_mutex);
2747 mutex_init(&mdev->data.mutex); 2751 mutex_init(&mdev->data.mutex);
@@ -2819,6 +2823,7 @@ void drbd_mdev_cleanup(struct drbd_conf *mdev)
2819 mdev->rs_total = 2823 mdev->rs_total =
2820 mdev->rs_failed = 0; 2824 mdev->rs_failed = 0;
2821 mdev->rs_last_events = 0; 2825 mdev->rs_last_events = 0;
2826 mdev->rs_last_sect_ev = 0;
2822 for (i = 0; i < DRBD_SYNC_MARKS; i++) { 2827 for (i = 0; i < DRBD_SYNC_MARKS; i++) {
2823 mdev->rs_mark_left[i] = 0; 2828 mdev->rs_mark_left[i] = 0;
2824 mdev->rs_mark_time[i] = 0; 2829 mdev->rs_mark_time[i] = 0;