]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
md/raid5: fix spares errors about rcu usage
authorYu Kuai <yukuai3@huawei.com>
Sat, 15 Jun 2024 08:51:43 +0000 (16:51 +0800)
committerSong Liu <song@kernel.org>
Thu, 4 Jul 2024 06:11:53 +0000 (06:11 +0000)
As commit ad8606702f26 ("md/raid5: remove rcu protection to access rdev
from conf") explains, rcu protection can be removed, however, there are
three places left, there won't be any real problems.

drivers/md/raid5.c:8071:24: error: incompatible types in comparison expression (different address spaces):
drivers/md/raid5.c:8071:24:    struct md_rdev [noderef] __rcu *
drivers/md/raid5.c:8071:24:    struct md_rdev *
drivers/md/raid5.c:7569:25: error: incompatible types in comparison expression (different address spaces):
drivers/md/raid5.c:7569:25:    struct md_rdev [noderef] __rcu *
drivers/md/raid5.c:7569:25:    struct md_rdev *
drivers/md/raid5.c:7573:25: error: incompatible types in comparison expression (different address spaces):
drivers/md/raid5.c:7573:25:    struct md_rdev [noderef] __rcu *
drivers/md/raid5.c:7573:25:    struct md_rdev *

Fixes: ad8606702f26 ("md/raid5: remove rcu protection to access rdev from conf")
Cc: stable@vger.kernel.org
Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Signed-off-by: Song Liu <song@kernel.org>
Link: https://lore.kernel.org/r/20240615085143.1648223-1-yukuai1@huaweicloud.com
drivers/md/raid5.c

index 10219205160bbf9d2ce45b3bdb99011fb610dc95..825fa629db33a3848d53db09db0acb0b7f63b51f 100644 (file)
@@ -155,7 +155,7 @@ static int raid6_idx_to_slot(int idx, struct stripe_head *sh,
        return slot;
 }
 
-static void print_raid5_conf (struct r5conf *conf);
+static void print_raid5_conf(struct r5conf *conf);
 
 static int stripe_operations_active(struct stripe_head *sh)
 {
@@ -7568,11 +7568,11 @@ static struct r5conf *setup_conf(struct mddev *mddev)
                if (test_bit(Replacement, &rdev->flags)) {
                        if (disk->replacement)
                                goto abort;
-                       RCU_INIT_POINTER(disk->replacement, rdev);
+                       disk->replacement = rdev;
                } else {
                        if (disk->rdev)
                                goto abort;
-                       RCU_INIT_POINTER(disk->rdev, rdev);
+                       disk->rdev = rdev;
                }
 
                if (test_bit(In_sync, &rdev->flags)) {
@@ -8054,7 +8054,7 @@ static void raid5_status(struct seq_file *seq, struct mddev *mddev)
        seq_printf (seq, "]");
 }
 
-static void print_raid5_conf (struct r5conf *conf)
+static void print_raid5_conf(struct r5conf *conf)
 {
        struct md_rdev *rdev;
        int i;
@@ -8068,15 +8068,13 @@ static void print_raid5_conf (struct r5conf *conf)
               conf->raid_disks,
               conf->raid_disks - conf->mddev->degraded);
 
-       rcu_read_lock();
        for (i = 0; i < conf->raid_disks; i++) {
-               rdev = rcu_dereference(conf->disks[i].rdev);
+               rdev = conf->disks[i].rdev;
                if (rdev)
                        pr_debug(" disk %d, o:%d, dev:%pg\n",
                               i, !test_bit(Faulty, &rdev->flags),
                               rdev->bdev);
        }
-       rcu_read_unlock();
 }
 
 static int raid5_spare_active(struct mddev *mddev)