1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-27 18:04:20 +03:00

Add new pv_remove_metadata_area interface function.

This commit is contained in:
Peter Rajnoha 2011-02-21 12:17:54 +00:00
parent 83f5538979
commit d58036bc42
3 changed files with 33 additions and 0 deletions

View File

@ -2272,6 +2272,29 @@ bad:
return 0;
}
int remove_metadata_area_from_pv(struct physical_volume *pv,
unsigned mda_index)
{
if (mda_index >= FMT_TEXT_MAX_MDAS_PER_PV) {
log_error(INTERNAL_ERROR "can't remove metadata area with "
"index %u from PV %s. Metadata "
"layou not supported by %s format.",
mda_index, dev_name(pv->dev),
pv->fmt->name);
return 0;
}
return fid_remove_mda(pv->fid, NULL, (const char *) &pv->id,
ID_LEN, mda_index);
}
static int _text_pv_remove_metadata_area(const struct format_type *fmt,
struct physical_volume *pv,
unsigned mda_index)
{
return remove_metadata_area_from_pv(pv, mda_index);
}
/* NULL vgname means use only the supplied context e.g. an archive file */
static struct format_instance *_text_create_text_instance(const struct format_type *fmt,
const struct format_instance_ctx *fic)
@ -2347,6 +2370,7 @@ static struct format_handler _text_handler = {
.pv_read = _text_pv_read,
.pv_setup = _text_pv_setup,
.pv_add_metadata_area = _text_pv_add_metadata_area,
.pv_remove_metadata_area = _text_pv_remove_metadata_area,
.pv_write = _text_pv_write,
.vg_setup = _text_vg_setup,
.lv_setup = _text_lv_setup,

View File

@ -61,6 +61,8 @@ int add_metadata_area_to_pv(struct physical_volume *pv,
uint64_t mda_start,
uint64_t mda_size,
unsigned mda_ignored);
int remove_metadata_area_from_pv(struct physical_volume *pv,
unsigned mda_index);
int add_mda(const struct format_type *fmt, struct dm_pool *mem, struct dm_list *mdas,
struct device *dev, uint64_t start, uint64_t size, unsigned ignored);
void del_mdas(struct dm_list *mdas);

View File

@ -277,6 +277,13 @@ struct format_handler {
uint64_t metadata_size,
unsigned metadata_ignored);
/*
* Remove metadata area from a PV. Changes will take effect on pv_write.
*/
int (*pv_remove_metadata_area) (const struct format_type *fmt,
struct physical_volume *pv,
unsigned metadata_index);
/*
* Write a PV structure to disk. Fails if the PV is in a VG ie
* pv->vg_name must be a valid orphan VG name