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)
.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,
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);
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