]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
md/raid10: check before referencing mddev->bitmap_ops
authorYu Kuai <yukuai3@huawei.com>
Mon, 7 Jul 2025 01:27:07 +0000 (09:27 +0800)
committerYu Kuai <yukuai3@huawei.com>
Sat, 6 Sep 2025 09:12:07 +0000 (17:12 +0800)
Prepare to introduce CONFIG_MD_BITMAP.

Link: https://lore.kernel.org/linux-raid/20250707012711.376844-12-yukuai1@huaweicloud.com
Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Reviewed-by: Xiao Ni <xni@redhat.com>
drivers/md/raid10.c

index d047e9dfdb85006d08f98d68bcbcd26a378aae88..2411399a735211b3336fdaf801515cd20b529fab 100644 (file)
@@ -3247,7 +3247,8 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
                        }
                        conf->fullsync = 0;
                }
-               mddev->bitmap_ops->close_sync(mddev);
+               if (md_bitmap_enabled(mddev, false))
+                       mddev->bitmap_ops->close_sync(mddev);
                close_sync(conf);
                *skipped = 1;
                return sectors_skipped;
@@ -3566,7 +3567,8 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
                 * safety reason, which ensures curr_resync_completed is
                 * updated in bitmap_cond_end_sync.
                 */
-               mddev->bitmap_ops->cond_end_sync(mddev, sector_nr,
+               if (md_bitmap_enabled(mddev, false))
+                       mddev->bitmap_ops->cond_end_sync(mddev, sector_nr,
                                        mddev_is_clustered(mddev) &&
                                        (sector_nr + 2 * RESYNC_SECTORS > conf->cluster_sync_high));
 
@@ -4220,7 +4222,6 @@ static int raid10_resize(struct mddev *mddev, sector_t sectors)
         */
        struct r10conf *conf = mddev->private;
        sector_t oldsize, size;
-       int ret;
 
        if (mddev->reshape_position != MaxSector)
                return -EBUSY;
@@ -4234,9 +4235,12 @@ static int raid10_resize(struct mddev *mddev, sector_t sectors)
            mddev->array_sectors > size)
                return -EINVAL;
 
-       ret = mddev->bitmap_ops->resize(mddev, size, 0);
-       if (ret)
-               return ret;
+       if (md_bitmap_enabled(mddev, false)) {
+               int ret = mddev->bitmap_ops->resize(mddev, size, 0);
+
+               if (ret)
+                       return ret;
+       }
 
        md_set_array_sectors(mddev, size);
        if (sectors > mddev->dev_sectors &&
@@ -4502,7 +4506,8 @@ static int raid10_start_reshape(struct mddev *mddev)
                oldsize = raid10_size(mddev, 0, 0);
                newsize = raid10_size(mddev, 0, conf->geo.raid_disks);
 
-               if (!mddev_is_clustered(mddev)) {
+               if (!mddev_is_clustered(mddev) &&
+                   md_bitmap_enabled(mddev, false)) {
                        ret = mddev->bitmap_ops->resize(mddev, newsize, 0);
                        if (ret)
                                goto abort;
@@ -4525,6 +4530,7 @@ static int raid10_start_reshape(struct mddev *mddev)
                            MD_FEATURE_RESHAPE_ACTIVE)) || (oldsize == newsize))
                        goto out;
 
+               /* cluster can't be setup without bitmap */
                ret = mddev->bitmap_ops->resize(mddev, newsize, 0);
                if (ret)
                        goto abort;