Commit c65c20dc authored by Yu Kuai's avatar Yu Kuai Committed by Song Liu
Browse files

md/md-bitmap: merge md_bitmap_free() into bitmap_operations



So that the implementation won't be exposed, and it'll be possible
o invent a new bitmap by replacing bitmap_operations.

Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
Link: https://lore.kernel.org/r/20240826074452.1490072-40-yukuai1@huaweicloud.com


Signed-off-by: default avatarSong Liu <song@kernel.org>
parent ef1c400f
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -1828,10 +1828,7 @@ static void bitmap_flush(struct mddev *mddev)
	bitmap_update_sb(bitmap);
}

/*
 * free memory that was allocated
 */
void md_bitmap_free(struct bitmap *bitmap)
static void md_bitmap_free(struct bitmap *bitmap)
{
	unsigned long k, pages;
	struct bitmap_page *bp;
@@ -1865,7 +1862,6 @@ void md_bitmap_free(struct bitmap *bitmap)
	kfree(bp);
	kfree(bitmap);
}
EXPORT_SYMBOL(md_bitmap_free);

void md_bitmap_wait_behind_writes(struct mddev *mddev)
{
@@ -2782,6 +2778,7 @@ static struct bitmap_operations bitmap_ops = {
	.get_from_slot		= bitmap_get_from_slot,
	.copy_from_slot		= bitmap_copy_from_slot,
	.set_pages		= bitmap_set_pages,
	.free			= md_bitmap_free,
};

void mddev_set_bitmap_ops(struct mddev *mddev)
+1 −2
Original line number Diff line number Diff line
@@ -280,14 +280,13 @@ struct bitmap_operations {
	int (*copy_from_slot)(struct mddev *mddev, int slot, sector_t *lo,
			      sector_t *hi, bool clear_bits);
	void (*set_pages)(struct bitmap *bitmap, unsigned long pages);
	void (*free)(struct bitmap *bitmap);
};

/* the bitmap API */
void mddev_set_bitmap_ops(struct mddev *mddev);

/* these are exported */

void md_bitmap_free(struct bitmap *bitmap);
void md_bitmap_wait_behind_writes(struct mddev *mddev);

static inline bool md_bitmap_enabled(struct bitmap *bitmap)
+6 −6
Original line number Diff line number Diff line
@@ -1201,12 +1201,12 @@ static int resize_bitmaps(struct mddev *mddev, sector_t newsize, sector_t oldsiz
			 * can't resize bitmap
			 */
			goto out;
		md_bitmap_free(bitmap);
		mddev->bitmap_ops->free(bitmap);
	}

	return 0;
out:
	md_bitmap_free(bitmap);
	mddev->bitmap_ops->free(bitmap);
	update_bitmap_size(mddev, oldsize);
	return -1;
}
@@ -1250,7 +1250,7 @@ static int cluster_check_sync_size(struct mddev *mddev)
		bm_lockres = lockres_init(mddev, str, NULL, 1);
		if (!bm_lockres) {
			pr_err("md-cluster: Cannot initialize %s\n", str);
			md_bitmap_free(bitmap);
			mddev->bitmap_ops->free(bitmap);
			return -1;
		}
		bm_lockres->flags |= DLM_LKF_NOQUEUE;
@@ -1261,17 +1261,17 @@ static int cluster_check_sync_size(struct mddev *mddev)

		rv = mddev->bitmap_ops->get_stats(bitmap, &stats);
		if (rv) {
			md_bitmap_free(bitmap);
			mddev->bitmap_ops->free(bitmap);
			return rv;
		}

		if (sync_size == 0) {
			sync_size = stats.sync_size;
		} else if (sync_size != stats.sync_size) {
			md_bitmap_free(bitmap);
			mddev->bitmap_ops->free(bitmap);
			return -1;
		}
		md_bitmap_free(bitmap);
		mddev->bitmap_ops->free(bitmap);
	}

	return (my_sync_size == sync_size) ? 0 : -1;