Enable bitmap support for external metadata

The patch enables the implementation of a write-intent bitmap for external
metadata.
Configuration of the internal bitmaps for non-native metadata requires the
extension in superswitch to perform an additional sysfs setup before the
array is activated.

Signed-off-by: Jakub Radtke <jakub.radtke@intel.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
This commit is contained in:
Jakub Radtke 2021-01-15 00:46:55 -05:00 committed by Jes Sorensen
parent b090e91075
commit b554ab5c9b
3 changed files with 22 additions and 0 deletions

View File

@ -2094,6 +2094,13 @@ int assemble_container_content(struct supertype *st, int mdfd,
}
}
/*
* Before activating the array, perform extra steps required
* to configure the internal write-intent bitmap.
*/
if (content->consistency_policy == CONSISTENCY_POLICY_BITMAP &&
st->ss->set_bitmap)
st->ss->set_bitmap(st, content);
if (start_reshape) {
int spare = content->array.raid_disks + expansion;

View File

@ -989,6 +989,18 @@ int Create(struct supertype *st, char *mddev,
st->ss->free_super(st);
goto abort_locked;
}
/*
* Before activating the array, perform extra steps
* required to configure the internal write-intent
* bitmap.
*/
if (info_new.consistency_policy ==
CONSISTENCY_POLICY_BITMAP &&
st->ss->set_bitmap &&
st->ss->set_bitmap(st, &info)) {
st->ss->free_super(st);
goto abort_locked;
}
/* update parent container uuid */
if (me) {

View File

@ -1007,6 +1007,9 @@ extern struct superswitch {
int (*add_internal_bitmap)(struct supertype *st, int *chunkp,
int delay, int write_behind,
unsigned long long size, int may_change, int major);
/* Perform additional setup required to activate a bitmap.
*/
int (*set_bitmap)(struct supertype *st, struct mdinfo *info);
/* Seek 'fd' to start of write-intent-bitmap. Must be an
* md-native format bitmap
*/