From 5ecca04031ef53bd09012c61437b821677be22f2 Mon Sep 17 00:00:00 2001 From: majianpeng Date: Wed, 31 Oct 2012 11:59:10 +1100 Subject: [PATCH] --- yaml --- r: 346525 b: refs/heads/master c: 54f89341e8b8da0cdac8a7b873491739de19f098 h: refs/heads/master i: 346523: 234aa9b9c87a67b189e2df4a9d8d4a6bda313d48 v: v3 --- [refs] | 2 +- trunk/drivers/md/md.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 0a7f6de7d1d2..e487035dad10 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 35d78c66969fbbb51046e9f251849cf54e9ed88c +refs/heads/master: 54f89341e8b8da0cdac8a7b873491739de19f098 diff --git a/trunk/drivers/md/md.c b/trunk/drivers/md/md.c index f97083476475..6aefa4434819 100644 --- a/trunk/drivers/md/md.c +++ b/trunk/drivers/md/md.c @@ -7277,6 +7277,7 @@ EXPORT_SYMBOL_GPL(md_allow_write); #define SYNC_MARKS 10 #define SYNC_MARK_STEP (3*HZ) +#define UPDATE_FREQUENCY (5*60*HZ) void md_do_sync(struct md_thread *thread) { struct mddev *mddev = thread->mddev; @@ -7285,6 +7286,7 @@ void md_do_sync(struct md_thread *thread) window; sector_t max_sectors,j, io_sectors; unsigned long mark[SYNC_MARKS]; + unsigned long update_time; sector_t mark_cnt[SYNC_MARKS]; int last_mark,m; struct list_head *tmp; @@ -7444,6 +7446,7 @@ void md_do_sync(struct md_thread *thread) mddev->curr_resync_completed = j; sysfs_notify(&mddev->kobj, NULL, "sync_completed"); md_new_event(mddev); + update_time = jiffies; blk_start_plug(&plug); while (j < max_sectors) { @@ -7455,6 +7458,7 @@ void md_do_sync(struct md_thread *thread) ((mddev->curr_resync > mddev->curr_resync_completed && (mddev->curr_resync - mddev->curr_resync_completed) > (max_sectors >> 4)) || + time_after_eq(jiffies, update_time + UPDATE_FREQUENCY) || (j - mddev->curr_resync_completed)*2 >= mddev->resync_max - mddev->curr_resync_completed )) { @@ -7465,6 +7469,7 @@ void md_do_sync(struct md_thread *thread) if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) && j > mddev->recovery_cp) mddev->recovery_cp = j; + update_time = jiffies; set_bit(MD_CHANGE_CLEAN, &mddev->flags); sysfs_notify(&mddev->kobj, NULL, "sync_completed"); }