aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNate Dailey <nate.dailey@stratus.com>2017-11-30 11:33:30 -0500
committerShaohua Li <shli@fb.com>2017-12-01 15:19:47 -0500
commitd2e2ec8222b4cb49c59f6dc6f5c4fe6fb4c80de9 (patch)
tree84c377a418d8bccf0b2a26185732aa0096d8273d
parentff35f58e8f8eb520367879a0ccc6f2ec4b62b17b (diff)
md: limit mdstat resync progress to max_sectors
There is a small window near the end of md_do_sync where mddev->curr_resync can be equal to MaxSector. If status_resync is called during this window, the resulting /proc/mdstat output contains a HUGE number of = signs due to the very large curr_resync: Personalities : [raid1] md123 : active raid1 sdd3[2] sdb3[0] 204736 blocks super 1.0 [2/1] [U_] [===================================================================== ... (82 MB more) ... ================>] recovery =429496729.3% (9223372036854775807/204736) finish=0.2min speed=12796K/sec bitmap: 0/1 pages [0KB], 65536KB chunk Modify status_resync to ensure the resync variable doesn't exceed the array's max_sectors. Signed-off-by: Nate Dailey <nate.dailey@stratus.com> Acked-by: Guoqing Jiang <gqjiang@suse.com> Signed-off-by: Shaohua Li <shli@fb.com>
-rw-r--r--drivers/md/md.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 41c050b59ec4..4e4dee0ec2de 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -7605,7 +7605,9 @@ static int status_resync(struct seq_file *seq, struct mddev *mddev)
7605 if (test_bit(MD_RECOVERY_DONE, &mddev->recovery)) 7605 if (test_bit(MD_RECOVERY_DONE, &mddev->recovery))
7606 /* Still cleaning up */ 7606 /* Still cleaning up */
7607 resync = max_sectors; 7607 resync = max_sectors;
7608 } else 7608 } else if (resync > max_sectors)
7609 resync = max_sectors;
7610 else
7609 resync -= atomic_read(&mddev->recovery_active); 7611 resync -= atomic_read(&mddev->recovery_active);
7610 7612
7611 if (resync == 0) { 7613 if (resync == 0) {