]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
md/raid5: don't set Faulty rdev for blocked_rdev
authorYu Kuai <yukuai3@huawei.com>
Thu, 31 Oct 2024 03:31:14 +0000 (11:31 +0800)
committerSong Liu <song@kernel.org>
Wed, 6 Nov 2024 00:08:39 +0000 (16:08 -0800)
Faulty rdev should never be accessed anymore, hence there is no point to
wait for bad block to be acknowledged in this case while handling write
request.

Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Tested-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
Link: https://lore.kernel.org/r/20241031033114.3845582-8-yukuai1@huaweicloud.com
Signed-off-by: Song Liu <song@kernel.org>
drivers/md/raid5.c

index dc2ea636d173422295ea25d9529425d3232d9156..f5ac81dd21b2bde260a85cb16fb5bc826bc97ea4 100644 (file)
@@ -4724,14 +4724,13 @@ static void analyse_stripe(struct stripe_head *sh, struct stripe_head_state *s)
                if (rdev) {
                        is_bad = rdev_has_badblock(rdev, sh->sector,
                                                   RAID5_STRIPE_SECTORS(conf));
-                       if (s->blocked_rdev == NULL
-                           && (test_bit(Blocked, &rdev->flags)
-                               || is_bad < 0)) {
+                       if (s->blocked_rdev == NULL) {
                                if (is_bad < 0)
-                                       set_bit(BlockedBadBlocks,
-                                               &rdev->flags);
-                               s->blocked_rdev = rdev;
-                               atomic_inc(&rdev->nr_pending);
+                                       set_bit(BlockedBadBlocks, &rdev->flags);
+                               if (rdev_blocked(rdev)) {
+                                       s->blocked_rdev = rdev;
+                                       atomic_inc(&rdev->nr_pending);
+                               }
                        }
                }
                clear_bit(R5_Insync, &dev->flags);