diff options
author | Nate Dailey <nate.dailey@stratus.com> | 2017-11-30 11:33:30 -0500 |
---|---|---|
committer | Shaohua Li <shli@fb.com> | 2017-12-01 15:19:47 -0500 |
commit | d2e2ec8222b4cb49c59f6dc6f5c4fe6fb4c80de9 (patch) | |
tree | 84c377a418d8bccf0b2a26185732aa0096d8273d | |
parent | ff35f58e8f8eb520367879a0ccc6f2ec4b62b17b (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.c | 4 |
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) { |