From: Yu Kuai <yukuai3@xxxxxxxxxx> So that the implementation won't be exposed, and it'll be possible to invent a new bitmap by replacing bitmap_operations. Signed-off-by: Yu Kuai <yukuai3@xxxxxxxxxx> --- drivers/md/md-bitmap.c | 3 ++- drivers/md/md-bitmap.h | 9 ++++++++- drivers/md/md.c | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c index 9a21123a3b8b..aab7bb5418f7 100644 --- a/drivers/md/md-bitmap.c +++ b/drivers/md/md-bitmap.c @@ -1225,7 +1225,7 @@ static int md_bitmap_init_from_disk(struct bitmap *bitmap, sector_t start) return ret; } -void md_bitmap_write_all(struct bitmap *bitmap) +static void bitmap_write_all(struct bitmap *bitmap) { /* We don't actually write all bitmap blocks here, * just flag them as needing to be written @@ -2712,6 +2712,7 @@ static struct bitmap_operations bitmap_ops = { .destroy = bitmap_destroy, .flush = bitmap_flush, .status = bitmap_status, + .write_all = bitmap_write_all, .update_sb = bitmap_update_sb, }; diff --git a/drivers/md/md-bitmap.h b/drivers/md/md-bitmap.h index 3fd2e5a7ba9c..9df0c1d5f7ee 100644 --- a/drivers/md/md-bitmap.h +++ b/drivers/md/md-bitmap.h @@ -240,6 +240,7 @@ struct bitmap_operations { void (*destroy)(struct mddev *mddev); void (*flush)(struct mddev *mddev); void (*status)(struct seq_file *seq, struct bitmap *bitmap); + void (*write_all)(struct bitmap *bitmap); void (*update_sb)(struct bitmap *bitmap); }; @@ -296,7 +297,13 @@ static inline void md_bitmap_update_sb(struct mddev *mddev) mddev->bitmap_ops->update_sb(mddev->bitmap); } -void md_bitmap_write_all(struct bitmap *bitmap); +static inline void md_bitmap_write_all(struct mddev *mddev) +{ + if (!mddev->bitmap || !mddev->bitmap_ops->write_all) + return; + + mddev->bitmap_ops->write_all(mddev->bitmap); +} void md_bitmap_dirty_bits(struct bitmap *bitmap, unsigned long s, unsigned long e); diff --git a/drivers/md/md.c b/drivers/md/md.c index 033ea06f6abe..2260540dd458 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -9507,7 +9507,7 @@ static void md_start_sync(struct work_struct *ws) * stored on all devices. So make sure all bitmap pages get written. */ if (spares) - md_bitmap_write_all(mddev->bitmap); + md_bitmap_write_all(mddev); name = test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) ? "reshape" : "resync"; -- 2.39.2