dm raid: support to change bitmap region size
Signed-off-by: Heinz Mauelshagen <heinzm@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
parent
d41bfed091
commit
4257e085e2
|
@ -217,6 +217,7 @@ struct raid_set {
|
||||||
int delta_disks;
|
int delta_disks;
|
||||||
int data_offset;
|
int data_offset;
|
||||||
int raid10_copies;
|
int raid10_copies;
|
||||||
|
int requested_bitmap_chunk_sectors;
|
||||||
|
|
||||||
struct mddev md;
|
struct mddev md;
|
||||||
struct raid_type *raid_type;
|
struct raid_type *raid_type;
|
||||||
|
@ -1277,6 +1278,7 @@ static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
|
||||||
}
|
}
|
||||||
|
|
||||||
region_size = value;
|
region_size = value;
|
||||||
|
rs->requested_bitmap_chunk_sectors = value;
|
||||||
} else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_RAID10_COPIES))) {
|
} else if (!strcasecmp(key, dm_raid_arg_name_by_flag(CTR_FLAG_RAID10_COPIES))) {
|
||||||
if (test_and_set_bit(__CTR_FLAG_RAID10_COPIES, &rs->ctr_flags)) {
|
if (test_and_set_bit(__CTR_FLAG_RAID10_COPIES, &rs->ctr_flags)) {
|
||||||
rs->ti->error = "Only one raid10_copies argument pair allowed";
|
rs->ti->error = "Only one raid10_copies argument pair allowed";
|
||||||
|
@ -3401,6 +3403,15 @@ static int raid_preresume(struct dm_target *ti)
|
||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
/* Resize bitmap to adjust to changed region size (aka MD bitmap chunksize) */
|
||||||
|
if (test_bit(RT_FLAG_RS_BITMAP_LOADED, &rs->runtime_flags) &&
|
||||||
|
mddev->bitmap_info.chunksize != to_bytes(rs->requested_bitmap_chunk_sectors)) {
|
||||||
|
r = bitmap_resize(mddev->bitmap, mddev->dev_sectors,
|
||||||
|
to_bytes(rs->requested_bitmap_chunk_sectors), 0);
|
||||||
|
if (r)
|
||||||
|
DMERR("Failed to resize bitmap");
|
||||||
|
}
|
||||||
|
|
||||||
/* Check for any resize/reshape on @rs and adjust/initiate */
|
/* Check for any resize/reshape on @rs and adjust/initiate */
|
||||||
/* Be prepared for mddev_resume() in raid_resume() */
|
/* Be prepared for mddev_resume() in raid_resume() */
|
||||||
set_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
|
set_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
|
||||||
|
|
Loading…
Reference in New Issue