From: Peter Rajnoha Date: Mon, 21 Feb 2011 12:17:54 +0000 (+0000) Subject: Add new pv_remove_metadata_area interface function. X-Git-Tag: old-v2_02_85~175 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=d58036bc42e90829ae82a486c72fbb0c190ff31e;p=lvm2.git Add new pv_remove_metadata_area interface function. --- diff --git a/lib/format_text/format-text.c b/lib/format_text/format-text.c index e11ab52c3..c50f398a9 100644 --- a/lib/format_text/format-text.c +++ b/lib/format_text/format-text.c @@ -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, diff --git a/lib/format_text/format-text.h b/lib/format_text/format-text.h index f65be745d..694b5c1b4 100644 --- a/lib/format_text/format-text.h +++ b/lib/format_text/format-text.h @@ -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); diff --git a/lib/metadata/metadata.h b/lib/metadata/metadata.h index e112007a0..beb6834f6 100644 --- a/lib/metadata/metadata.h +++ b/lib/metadata/metadata.h @@ -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