From afc29a3d691cb92351c573f09e4030b996b015cb Mon Sep 17 00:00:00 2001 From: Peter Rajnoha Date: Mon, 21 Feb 2011 12:10:58 +0000 Subject: [PATCH] Add vg_set_fid function to change VG format instance. This function also sets a reference to a new VG format instance for all PVs that are part of the VG so the PV-VG interconnection is consistent after the change. --- lib/format_text/archiver.c | 3 ++- lib/metadata/metadata.c | 10 ++++++++++ lib/metadata/metadata.h | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/format_text/archiver.c b/lib/format_text/archiver.c index 841196526..8b7e240d5 100644 --- a/lib/format_text/archiver.c +++ b/lib/format_text/archiver.c @@ -308,10 +308,11 @@ int backup_restore_vg(struct cmd_context *cmd, struct volume_group *vg) fic.type = FMT_INSTANCE_VG | FMT_INSTANCE_MDAS | FMT_INSTANCE_AUX_MDAS; fic.context.vg_ref.vg_name = vg->name; fic.context.vg_ref.vg_id = NULL; - if (!(vg->fid = cmd->fmt->ops->create_instance(cmd->fmt, &fic))) { + if (!(fid = cmd->fmt->ops->create_instance(cmd->fmt, &fic))) { log_error("Failed to allocate format instance"); return 0; } + vg_set_fid(vg, fid); /* * Setting vg->old_name to a blank value will explicitly diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c index 069699748..85796009f 100644 --- a/lib/metadata/metadata.c +++ b/lib/metadata/metadata.c @@ -3931,6 +3931,16 @@ uint32_t vg_lock_newname(struct cmd_context *cmd, const char *vgname) return FAILED_EXIST; } +void vg_set_fid(struct volume_group *vg, + struct format_instance *fid) +{ + struct pv_list *pvl; + + vg->fid = fid; + dm_list_iterate_items(pvl, &vg->pvs) + pvl->pv->fid = fid; +} + static int _convert_key_to_string(const char *key, size_t key_len, unsigned sub_key, char *buf, size_t buf_len) { diff --git a/lib/metadata/metadata.h b/lib/metadata/metadata.h index ab292b5cf..6981d8e30 100644 --- a/lib/metadata/metadata.h +++ b/lib/metadata/metadata.h @@ -190,6 +190,7 @@ struct metadata_area *mda_copy(struct dm_pool *mem, unsigned mda_is_ignored(struct metadata_area *mda); void mda_set_ignored(struct metadata_area *mda, unsigned ignored); unsigned mda_locns_match(struct metadata_area *mda1, struct metadata_area *mda2); +void vg_set_fid(struct volume_group *vg, struct format_instance *fid); int fid_add_mda(struct format_instance *fid, struct metadata_area *mda, const char *key, size_t key_len, const unsigned sub_key); int fid_add_mdas(struct format_instance *fid, struct dm_list *mdas, -- 2.43.5