diff options
author | Lars Ellenberg <lars.ellenberg@linbit.com> | 2010-08-11 17:40:24 -0400 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2010-10-14 12:38:20 -0400 |
commit | 0f0601f4ea2f53cfd8bcae060fb03d9bbde070ec (patch) | |
tree | 42bcbd8edf48c9cee526893108cc69b4918a9f64 /drivers/block/drbd/drbd_main.c | |
parent | 80a40e439e5a3f30b0a6210a1add6d7c33392e54 (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.c | 7 |
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; |