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

md/md-bitmap: pass in mddev directly for md_bitmap_resize()



And move the condition "if (mddev->bitmap)" into md_bitmap_resize() as
well, on the one hand make code cleaner, on the other hand try not to
access bitmap directly.

Since we are here, also change the parameter 'init' from int to bool.

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


Signed-off-by: default avatarSong Liu <song@kernel.org>
parent 18db2a9c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4068,7 +4068,7 @@ static int raid_preresume(struct dm_target *ti)
	       mddev->bitmap_info.chunksize != to_bytes(rs->requested_bitmap_chunk_sectors)))) {
		int chunksize = to_bytes(rs->requested_bitmap_chunk_sectors) ?: mddev->bitmap_info.chunksize;

		r = md_bitmap_resize(mddev->bitmap, mddev->dev_sectors, chunksize, 0);
		r = md_bitmap_resize(mddev, mddev->dev_sectors, chunksize, false);
		if (r)
			DMERR("Failed to resize bitmap");
	}
+18 −3
Original line number Diff line number Diff line
@@ -32,6 +32,9 @@
#include "md.h"
#include "md-bitmap.h"

static int __bitmap_resize(struct bitmap *bitmap, sector_t blocks,
			   int chunksize, bool init);

static inline char *bmname(struct bitmap *bitmap)
{
	return bitmap->mddev ? mdname(bitmap->mddev) : "mdX";
@@ -1975,7 +1978,8 @@ static struct bitmap *__bitmap_create(struct mddev *mddev, int slot)
		goto error;

	bitmap->daemon_lastrun = jiffies;
	err = md_bitmap_resize(bitmap, blocks, mddev->bitmap_info.chunksize, 1);
	err = __bitmap_resize(bitmap, blocks, mddev->bitmap_info.chunksize,
			      true);
	if (err)
		goto error;

@@ -2163,8 +2167,8 @@ static int bitmap_get_stats(struct bitmap *bitmap, struct md_bitmap_stats *stats
	return 0;
}

int md_bitmap_resize(struct bitmap *bitmap, sector_t blocks,
		  int chunksize, int init)
static int __bitmap_resize(struct bitmap *bitmap, sector_t blocks,
			   int chunksize, bool init)
{
	/* If chunk_size is 0, choose an appropriate chunk size.
	 * Then possibly allocate new storage space.
@@ -2369,6 +2373,17 @@ int md_bitmap_resize(struct bitmap *bitmap, sector_t blocks,
err:
	return ret;
}

int md_bitmap_resize(struct mddev *mddev, sector_t blocks, int chunksize,
		     bool init)
{
	struct bitmap *bitmap = mddev->bitmap;

	if (!bitmap)
		return 0;

	return __bitmap_resize(bitmap, blocks, chunksize, init);
}
EXPORT_SYMBOL_GPL(md_bitmap_resize);

static ssize_t
+2 −2
Original line number Diff line number Diff line
@@ -280,8 +280,8 @@ void mddev_set_bitmap_ops(struct mddev *mddev);

/* these are exported */

int md_bitmap_resize(struct bitmap *bitmap, sector_t blocks,
		     int chunksize, int init);
int md_bitmap_resize(struct mddev *mddev, sector_t blocks, int chunksize,
		     bool init);
struct bitmap *get_bitmap_from_slot(struct mddev *mddev, int slot);
int md_bitmap_copy_from_slot(struct mddev *mddev, int slot,
			     sector_t *lo, sector_t *hi, bool clear_bits);
+2 −2
Original line number Diff line number Diff line
@@ -628,8 +628,8 @@ static int process_recvd_msg(struct mddev *mddev, struct cluster_msg *msg)
		break;
	case BITMAP_RESIZE:
		if (le64_to_cpu(msg->high) != mddev->pers->size(mddev, 0, 0))
			ret = md_bitmap_resize(mddev->bitmap,
					    le64_to_cpu(msg->high), 0, 0);
			ret = md_bitmap_resize(mddev, le64_to_cpu(msg->high), 0,
					       false);
		break;
	default:
		ret = -1;
+7 −5
Original line number Diff line number Diff line
@@ -3297,14 +3297,16 @@ static int raid1_resize(struct mddev *mddev, sector_t sectors)
	 * worth it.
	 */
	sector_t newsize = raid1_size(mddev, sectors, 0);
	int ret;

	if (mddev->external_size &&
	    mddev->array_sectors > newsize)
		return -EINVAL;
	if (mddev->bitmap) {
		int ret = md_bitmap_resize(mddev->bitmap, newsize, 0, 0);

	ret = md_bitmap_resize(mddev, newsize, 0, false);
	if (ret)
		return ret;
	}

	md_set_array_sectors(mddev, newsize);
	if (sectors > mddev->dev_sectors &&
	    mddev->recovery_cp > mddev->dev_sectors) {
Loading