md/raid10: end bio when the device faulty
authorYufen Yu <yuyufen@huawei.com>
Fri, 19 Jul 2019 05:48:47 +0000 (13:48 +0800)
committerSong Liu <songliubraving@fb.com>
Wed, 7 Aug 2019 17:25:02 +0000 (10:25 -0700)
Just like raid1, we do not queue write error bio to retry write
and acknowlege badblocks, when the device is faulty.

Signed-off-by: Yufen Yu <yuyufen@huawei.com>
Signed-off-by: Song Liu <songliubraving@fb.com>
drivers/md/raid10.c

index 8a1354a08a1a30cca7c8b68752621c923f107f5b..a982e040b609bbad2b079269335e319aefba92ed 100644 (file)
@@ -465,19 +465,21 @@ static void raid10_end_write_request(struct bio *bio)
                        if (test_bit(FailFast, &rdev->flags) &&
                            (bio->bi_opf & MD_FAILFAST)) {
                                md_error(rdev->mddev, rdev);
-                               if (!test_bit(Faulty, &rdev->flags))
-                                       /* This is the only remaining device,
-                                        * We need to retry the write without
-                                        * FailFast
-                                        */
-                                       set_bit(R10BIO_WriteError, &r10_bio->state);
-                               else {
-                                       r10_bio->devs[slot].bio = NULL;
-                                       to_put = bio;
-                                       dec_rdev = 1;
-                               }
-                       } else
+                       }
+
+                       /*
+                        * When the device is faulty, it is not necessary to
+                        * handle write error.
+                        * For failfast, this is the only remaining device,
+                        * We need to retry the write without FailFast.
+                        */
+                       if (!test_bit(Faulty, &rdev->flags))
                                set_bit(R10BIO_WriteError, &r10_bio->state);
+                       else {
+                               r10_bio->devs[slot].bio = NULL;
+                               to_put = bio;
+                               dec_rdev = 1;
+                       }
                }
        } else {
                /*