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 | 7 +++---- drivers/md/md-bitmap.h | 11 ++++++++++- drivers/md/raid1.c | 2 +- drivers/md/raid10.c | 2 +- drivers/md/raid5.c | 2 +- 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c index 100551868484..3c09de471634 100644 --- a/drivers/md/md-bitmap.c +++ b/drivers/md/md-bitmap.c @@ -1669,13 +1669,12 @@ static void bitmap_close_sync(struct bitmap *bitmap) } } -void md_bitmap_cond_end_sync(struct bitmap *bitmap, sector_t sector, bool force) +static void bitmap_cond_end_sync(struct bitmap *bitmap, sector_t sector, + bool force) { sector_t s = 0; sector_t blocks; - if (!bitmap) - return; if (sector == 0) { bitmap->last_end_sync = jiffies; return; @@ -1697,7 +1696,6 @@ void md_bitmap_cond_end_sync(struct bitmap *bitmap, sector_t sector, bool force) bitmap->last_end_sync = jiffies; sysfs_notify_dirent_safe(bitmap->mddev->sysfs_completed); } -EXPORT_SYMBOL(md_bitmap_cond_end_sync); void md_bitmap_sync_with_cluster(struct mddev *mddev, sector_t old_lo, sector_t old_hi, @@ -2713,6 +2711,7 @@ static struct bitmap_operations bitmap_ops = { .start_sync = bitmap_start_sync, .end_sync = bitmap_end_sync, .close_sync = bitmap_close_sync, + .cond_end_sync = bitmap_cond_end_sync, .update_sb = bitmap_update_sb, }; diff --git a/drivers/md/md-bitmap.h b/drivers/md/md-bitmap.h index 56ede16ce5fe..71c3610dca7b 100644 --- a/drivers/md/md-bitmap.h +++ b/drivers/md/md-bitmap.h @@ -252,6 +252,7 @@ struct bitmap_operations { void (*end_sync)(struct bitmap *bitmap, sector_t offset, sector_t *blocks, int aborted); void (*close_sync)(struct bitmap *bitmap); + void (*cond_end_sync)(struct bitmap *bitmap, sector_t sector, bool force); void (*update_sb)(struct bitmap *bitmap); }; @@ -376,7 +377,15 @@ static inline void md_bitmap_close_sync(struct mddev *mddev) mddev->bitmap_ops->close_sync(mddev->bitmap); } -void md_bitmap_cond_end_sync(struct bitmap *bitmap, sector_t sector, bool force); +static inline void md_bitmap_cond_end_sync(struct mddev *mddev, sector_t sector, + bool force) +{ + if (!mddev->bitmap || !mddev->bitmap_ops->cond_end_sync) + return; + + mddev->bitmap_ops->cond_end_sync(mddev->bitmap, sector, force); +} + void md_bitmap_sync_with_cluster(struct mddev *mddev, sector_t old_lo, sector_t old_hi, sector_t new_lo, sector_t new_hi); diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 8f5beba4184c..c8cd6036441b 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -2825,7 +2825,7 @@ static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr, * sector_nr + two times RESYNC_SECTORS */ - md_bitmap_cond_end_sync(mddev->bitmap, sector_nr, + md_bitmap_cond_end_sync(mddev, sector_nr, mddev_is_clustered(mddev) && (sector_nr + 2 * RESYNC_SECTORS > conf->cluster_sync_high)); diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index 19035e9950f1..1ea9b4117b08 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -3536,7 +3536,7 @@ 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. */ - md_bitmap_cond_end_sync(mddev->bitmap, sector_nr, + md_bitmap_cond_end_sync(mddev, sector_nr, mddev_is_clustered(mddev) && (sector_nr + 2 * RESYNC_SECTORS > conf->cluster_sync_high)); diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 06f8a4a55b2b..8f0de56c0b23 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -6539,7 +6539,7 @@ static inline sector_t raid5_sync_request(struct mddev *mddev, sector_t sector_n return sync_blocks * RAID5_STRIPE_SECTORS(conf); } - md_bitmap_cond_end_sync(mddev->bitmap, sector_nr, false); + md_bitmap_cond_end_sync(mddev, sector_nr, false); sh = raid5_get_active_stripe(conf, NULL, sector_nr, R5_GAS_NOBLOCK); -- 2.39.2