]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
md/md-bitmap: merge md_bitmap_end_sync() into bitmap_operations
authorYu Kuai <yukuai3@huawei.com>
Mon, 26 Aug 2024 07:44:37 +0000 (15:44 +0800)
committerSong Liu <song@kernel.org>
Tue, 27 Aug 2024 17:14:17 +0000 (10:14 -0700)
So that the implementation won't be exposed, and it'll be possible
to invent a new bitmap by replacing bitmap_operations.

Also change the parameter from bitmap to mddev, to avoid access
bitmap outside md-bitmap.c as much as possible.

Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Link: https://lore.kernel.org/r/20240826074452.1490072-28-yukuai1@huaweicloud.com
Signed-off-by: Song Liu <song@kernel.org>
drivers/md/md-bitmap.c
drivers/md/md-bitmap.h
drivers/md/raid1.c
drivers/md/raid10.c
drivers/md/raid5.c

index 7e810fc2852e0ba901ef7cc426914c5207ad488c..8aef907da158146340d4840672bdd27d385de64a 100644 (file)
@@ -1665,12 +1665,11 @@ static void __bitmap_end_sync(struct bitmap *bitmap, sector_t offset,
        spin_unlock_irqrestore(&bitmap->counts.lock, flags);
 }
 
-void md_bitmap_end_sync(struct bitmap *bitmap, sector_t offset,
-                       sector_t *blocks)
+static void bitmap_end_sync(struct mddev *mddev, sector_t offset,
+                           sector_t *blocks)
 {
-       __bitmap_end_sync(bitmap, offset, blocks, true);
+       __bitmap_end_sync(mddev->bitmap, offset, blocks, true);
 }
-EXPORT_SYMBOL(md_bitmap_end_sync);
 
 void md_bitmap_close_sync(struct bitmap *bitmap)
 {
@@ -2745,6 +2744,7 @@ static struct bitmap_operations bitmap_ops = {
        .startwrite             = bitmap_startwrite,
        .endwrite               = bitmap_endwrite,
        .start_sync             = bitmap_start_sync,
+       .end_sync               = bitmap_end_sync,
 
        .update_sb              = bitmap_update_sb,
        .get_stats              = bitmap_get_stats,
index 6691524bdc80d10322a27171a8e9525c1231cf8d..d6f2d5979da4d01df46880a93975c5e8a5dd6419 100644 (file)
@@ -261,6 +261,7 @@ struct bitmap_operations {
                         unsigned long sectors, bool success, bool behind);
        bool (*start_sync)(struct mddev *mddev, sector_t offset,
                           sector_t *blocks, bool degraded);
+       void (*end_sync)(struct mddev *mddev, sector_t offset, sector_t *blocks);
 
        void (*update_sb)(struct bitmap *bitmap);
        int (*get_stats)(struct bitmap *bitmap, struct md_bitmap_stats *stats);
@@ -270,8 +271,6 @@ struct bitmap_operations {
 void mddev_set_bitmap_ops(struct mddev *mddev);
 
 /* these are exported */
-void md_bitmap_end_sync(struct bitmap *bitmap, sector_t offset,
-                       sector_t *blocks);
 void md_bitmap_close_sync(struct bitmap *bitmap);
 void md_bitmap_cond_end_sync(struct bitmap *bitmap, sector_t sector, bool force);
 void md_bitmap_sync_with_cluster(struct mddev *mddev,
index 5ee929c89cb1fdd514d8b5e81816fc6686ba1532..b50ba80742811d796fecb76422b49333d3b279c5 100644 (file)
@@ -2026,7 +2026,7 @@ static void abort_sync_write(struct mddev *mddev, struct r1bio *r1_bio)
 
        /* make sure these bits don't get cleared. */
        do {
-               md_bitmap_end_sync(mddev->bitmap, s, &sync_blocks);
+               mddev->bitmap_ops->end_sync(mddev, s, &sync_blocks);
                s += sync_blocks;
                sectors_to_go -= sync_blocks;
        } while (sectors_to_go > 0);
@@ -2772,8 +2772,8 @@ static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr,
                 * We can find the current addess in mddev->curr_resync
                 */
                if (mddev->curr_resync < max_sector) /* aborted */
-                       md_bitmap_end_sync(mddev->bitmap, mddev->curr_resync,
-                                          &sync_blocks);
+                       mddev->bitmap_ops->end_sync(mddev, mddev->curr_resync,
+                                                   &sync_blocks);
                else /* completed sync */
                        conf->fullsync = 0;
 
index 33372d30fa99a29a824b0600aa893a050092744b..15299a7774a061234d7cd95f79f6d509fccd37a4 100644 (file)
@@ -3194,13 +3194,15 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
 
                if (mddev->curr_resync < max_sector) { /* aborted */
                        if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery))
-                               md_bitmap_end_sync(mddev->bitmap, mddev->curr_resync,
-                                                  &sync_blocks);
+                               mddev->bitmap_ops->end_sync(mddev,
+                                                           mddev->curr_resync,
+                                                           &sync_blocks);
                        else for (i = 0; i < conf->geo.raid_disks; i++) {
                                sector_t sect =
                                        raid10_find_virt(conf, mddev->curr_resync, i);
-                               md_bitmap_end_sync(mddev->bitmap, sect,
-                                                  &sync_blocks);
+
+                               mddev->bitmap_ops->end_sync(mddev, sect,
+                                                           &sync_blocks);
                        }
                } else {
                        /* completed sync */
index 3e9fed1e11536cdbc2c01bec087f93d24f0904bd..89ae149bf28e545293f87836b749b4edcf41ccba 100644 (file)
@@ -6497,8 +6497,8 @@ static inline sector_t raid5_sync_request(struct mddev *mddev, sector_t sector_n
                }
 
                if (mddev->curr_resync < max_sector) /* aborted */
-                       md_bitmap_end_sync(mddev->bitmap, mddev->curr_resync,
-                                          &sync_blocks);
+                       mddev->bitmap_ops->end_sync(mddev, mddev->curr_resync,
+                                                   &sync_blocks);
                else /* completed sync */
                        conf->fullsync = 0;
                md_bitmap_close_sync(mddev->bitmap);