raid5 improve too many read errors msg by adding limits
authorNigel Croxon <ncroxon@redhat.com>
Wed, 21 Aug 2019 13:27:08 +0000 (09:27 -0400)
committerSong Liu <songliubraving@fb.com>
Tue, 27 Aug 2019 19:36:37 +0000 (12:36 -0700)
Often limits can be changed by admin. When discussing such things
it helps if you can provide "self-sustained" facts. Also
sometimes the admin thinks he changed a limit, but it did not
take effect for some reason or he changed the wrong thing.

V3: Only pr_warn when Faulty is 0.
V2: Add read_errors value to pr_warn.

Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
Signed-off-by: Song Liu <songliubraving@fb.com>
drivers/md/raid5.c

index 59cafaf..88e56ee 100644 (file)
@@ -2549,10 +2549,16 @@ static void raid5_end_read_request(struct bio * bi)
                                (unsigned long long)s,
                                bdn);
                } else if (atomic_read(&rdev->read_errors)
-                        > conf->max_nr_stripes)
-                       pr_warn("md/raid:%s: Too many read errors, failing device %s.\n",
-                              mdname(conf->mddev), bdn);
-               else
+                        > conf->max_nr_stripes) {
+                       if (!test_bit(Faulty, &rdev->flags)) {
+                               pr_warn("md/raid:%s: %d read_errors > %d stripes\n",
+                                   mdname(conf->mddev),
+                                   atomic_read(&rdev->read_errors),
+                                   conf->max_nr_stripes);
+                               pr_warn("md/raid:%s: Too many read errors, failing device %s.\n",
+                                   mdname(conf->mddev), bdn);
+                       }
+               } else
                        retry = 1;
                if (set_bad && test_bit(In_sync, &rdev->flags)
                    && !test_bit(R5_ReadNoMerge, &sh->dev[i].flags))