Commit 11033207 authored by Yu Kuai's avatar Yu Kuai
Browse files

md/md-bitmap: add md_bitmap_registered/enabled() helper

There are no functional changes, prepare to handle the case that
mddev->bitmap_ops can be NULL, which is possible after introducing
CONFIG_MD_BITMAP.

Link: https://lore.kernel.org/linux-raid/20250707012711.376844-7-yukuai1@huaweicloud.com


Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
Reviewed-by: default avatarXiao Ni <xni@redhat.com>
parent 9c41ead0
Loading
Loading
Loading
Loading
+4 −12
Original line number Diff line number Diff line
@@ -232,8 +232,10 @@ static inline char *bmname(struct bitmap *bitmap)
	return bitmap->mddev ? mdname(bitmap->mddev) : "mdX";
}

static bool __bitmap_enabled(struct bitmap *bitmap, bool flush)
static bool bitmap_enabled(void *data, bool flush)
{
	struct bitmap *bitmap = data;

	if (!flush)
		return true;

@@ -245,16 +247,6 @@ static bool __bitmap_enabled(struct bitmap *bitmap, bool flush)
	       bitmap->storage.filemap != NULL;
}

static bool bitmap_enabled(struct mddev *mddev, bool flush)
{
	struct bitmap *bitmap = mddev->bitmap;

	if (!bitmap)
		return false;

	return __bitmap_enabled(bitmap, flush);
}

/*
 * check a page and, if necessary, allocate it (or hijack it if the alloc fails)
 *
@@ -1251,7 +1243,7 @@ static void __bitmap_unplug(struct bitmap *bitmap)
	int dirty, need_write;
	int writing = 0;

	if (!__bitmap_enabled(bitmap, true))
	if (!bitmap_enabled(bitmap, true))
		return;

	/* look at each page to see if there are any set bits that need to be
+18 −1
Original line number Diff line number Diff line
@@ -62,7 +62,7 @@ struct md_bitmap_stats {
};

struct bitmap_operations {
	bool (*enabled)(struct mddev *mddev, bool flush);
	bool (*enabled)(void *data, bool flush);
	int (*create)(struct mddev *mddev);
	int (*resize)(struct mddev *mddev, sector_t blocks, int chunksize);

@@ -107,4 +107,21 @@ struct bitmap_operations {
/* the bitmap API */
void mddev_set_bitmap_ops(struct mddev *mddev);

static inline bool md_bitmap_registered(struct mddev *mddev)
{
	return mddev->bitmap_ops != NULL;
}

static inline bool md_bitmap_enabled(struct mddev *mddev, bool flush)
{
	/* bitmap_ops must be registered before creating bitmap. */
	if (!md_bitmap_registered(mddev))
		return false;

	if (!mddev->bitmap)
		return false;

	return mddev->bitmap_ops->enabled(mddev->bitmap, flush);
}

#endif
+1 −1
Original line number Diff line number Diff line
@@ -140,7 +140,7 @@ static inline bool raid1_add_bio_to_plug(struct mddev *mddev, struct bio *bio,
	 * If bitmap is not enabled, it's safe to submit the io directly, and
	 * this can get optimal performance.
	 */
	if (!mddev->bitmap_ops->enabled(mddev, true)) {
	if (!md_bitmap_enabled(mddev, true)) {
		raid1_submit_write(bio);
		return true;
	}