md: report sector of stripes with check mismatches
This makes it possible, with appropriate filesystem support, for a sysadmin to tell what is affected by the mismatch, and whether it should be ignored (if it's inside a swap partition, for instance). We ratelimit to prevent log flooding: if there are so many mismatches that ratelimiting is necessary, the individual messages are relatively unlikely to be important (either the machine is swapping like crazy or something is very wrong with the disk). Signed-off-by: Nick Alcock <nick.alcock@oracle.com> Signed-off-by: Shaohua Li <shli@fb.com>
This commit is contained in:
Родитель
4179bc30b2
Коммит
e153903686
|
@ -4085,10 +4085,15 @@ static void handle_parity_checks5(struct r5conf *conf, struct stripe_head *sh,
|
|||
set_bit(STRIPE_INSYNC, &sh->state);
|
||||
else {
|
||||
atomic64_add(STRIPE_SECTORS, &conf->mddev->resync_mismatches);
|
||||
if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery))
|
||||
if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery)) {
|
||||
/* don't try to repair!! */
|
||||
set_bit(STRIPE_INSYNC, &sh->state);
|
||||
else {
|
||||
pr_warn_ratelimited("%s: mismatch sector in range "
|
||||
"%llu-%llu\n", mdname(conf->mddev),
|
||||
(unsigned long long) sh->sector,
|
||||
(unsigned long long) sh->sector +
|
||||
STRIPE_SECTORS);
|
||||
} else {
|
||||
sh->check_state = check_state_compute_run;
|
||||
set_bit(STRIPE_COMPUTE_RUN, &sh->state);
|
||||
set_bit(STRIPE_OP_COMPUTE_BLK, &s->ops_request);
|
||||
|
@ -4237,10 +4242,15 @@ static void handle_parity_checks6(struct r5conf *conf, struct stripe_head *sh,
|
|||
}
|
||||
} else {
|
||||
atomic64_add(STRIPE_SECTORS, &conf->mddev->resync_mismatches);
|
||||
if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery))
|
||||
if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery)) {
|
||||
/* don't try to repair!! */
|
||||
set_bit(STRIPE_INSYNC, &sh->state);
|
||||
else {
|
||||
pr_warn_ratelimited("%s: mismatch sector in range "
|
||||
"%llu-%llu\n", mdname(conf->mddev),
|
||||
(unsigned long long) sh->sector,
|
||||
(unsigned long long) sh->sector +
|
||||
STRIPE_SECTORS);
|
||||
} else {
|
||||
int *target = &sh->ops.target;
|
||||
|
||||
sh->ops.target = -1;
|
||||
|
|
Загрузка…
Ссылка в новой задаче