]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
md/md-bitmap: merge md_bitmap_close_sync() into bitmap_operations
authorYu Kuai <yukuai3@huawei.com>
Mon, 26 Aug 2024 07:44:38 +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-29-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 8aef907da158146340d4840672bdd27d385de64a..e1dceff2d9a5c73c16c6fda41c74b380ec90dba2 100644 (file)
@@ -1671,7 +1671,7 @@ static void bitmap_end_sync(struct mddev *mddev, sector_t offset,
        __bitmap_end_sync(mddev->bitmap, offset, blocks, true);
 }
 
-void md_bitmap_close_sync(struct bitmap *bitmap)
+static void bitmap_close_sync(struct mddev *mddev)
 {
        /* Sync has finished, and any bitmap chunks that weren't synced
         * properly have been aborted.  It remains to us to clear the
@@ -1679,14 +1679,16 @@ void md_bitmap_close_sync(struct bitmap *bitmap)
         */
        sector_t sector = 0;
        sector_t blocks;
+       struct bitmap *bitmap = mddev->bitmap;
+
        if (!bitmap)
                return;
+
        while (sector < bitmap->mddev->resync_max_sectors) {
                __bitmap_end_sync(bitmap, sector, &blocks, false);
                sector += blocks;
        }
 }
-EXPORT_SYMBOL(md_bitmap_close_sync);
 
 void md_bitmap_cond_end_sync(struct bitmap *bitmap, sector_t sector, bool force)
 {
@@ -2017,7 +2019,7 @@ static int bitmap_load(struct mddev *mddev)
                bitmap_start_sync(mddev, sector, &blocks, false);
                sector += blocks;
        }
-       md_bitmap_close_sync(bitmap);
+       bitmap_close_sync(mddev);
 
        if (mddev->degraded == 0
            || bitmap->events_cleared == mddev->events)
@@ -2745,6 +2747,7 @@ static struct bitmap_operations bitmap_ops = {
        .endwrite               = bitmap_endwrite,
        .start_sync             = bitmap_start_sync,
        .end_sync               = bitmap_end_sync,
+       .close_sync             = bitmap_close_sync,
 
        .update_sb              = bitmap_update_sb,
        .get_stats              = bitmap_get_stats,
index d6f2d5979da4d01df46880a93975c5e8a5dd6419..5d919b5303176dd5e2152bc06f99a378b1cee205 100644 (file)
@@ -262,6 +262,7 @@ struct bitmap_operations {
        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 (*close_sync)(struct mddev *mddev);
 
        void (*update_sb)(struct bitmap *bitmap);
        int (*get_stats)(struct bitmap *bitmap, struct md_bitmap_stats *stats);
@@ -271,7 +272,6 @@ struct bitmap_operations {
 void mddev_set_bitmap_ops(struct mddev *mddev);
 
 /* these are exported */
-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,
                                 sector_t old_lo, sector_t old_hi,
index b50ba80742811d796fecb76422b49333d3b279c5..a6757c9a28940ebc6b4093bbec75551e856c4417 100644 (file)
@@ -2777,7 +2777,7 @@ static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr,
                else /* completed sync */
                        conf->fullsync = 0;
 
-               md_bitmap_close_sync(mddev->bitmap);
+               mddev->bitmap_ops->close_sync(mddev);
                close_sync(conf);
 
                if (mddev_is_clustered(mddev)) {
index 15299a7774a061234d7cd95f79f6d509fccd37a4..5b1c86c368b19b4487b48280abc3599b25586f48 100644 (file)
@@ -3222,7 +3222,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
                        }
                        conf->fullsync = 0;
                }
-               md_bitmap_close_sync(mddev->bitmap);
+               mddev->bitmap_ops->close_sync(mddev);
                close_sync(conf);
                *skipped = 1;
                return sectors_skipped;
index 89ae149bf28e545293f87836b749b4edcf41ccba..d2b8d2517abf812fdf3c5f3b0bfa3a843fee1fe4 100644 (file)
@@ -6501,7 +6501,7 @@ static inline sector_t raid5_sync_request(struct mddev *mddev, sector_t sector_n
                                                    &sync_blocks);
                else /* completed sync */
                        conf->fullsync = 0;
-               md_bitmap_close_sync(mddev->bitmap);
+               mddev->bitmap_ops->close_sync(mddev);
 
                return 0;
        }