From 10128c9bd67a027b480e0f0637745f97fb39ecfa Mon Sep 17 00:00:00 2001 From: Peter Rajnoha Date: Thu, 12 Mar 2015 14:49:10 +0100 Subject: [PATCH] metadata: schedule PV for header rewrite if adding a PV to VG or restoring VG When adding PV to VG, we need to rewrite PV header as there's a flip in PV_EXT_USED flag. The same applies if we're restoring VG from backup. --- lib/format_text/archiver.c | 10 ++++++++++ lib/metadata/metadata.c | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/format_text/archiver.c b/lib/format_text/archiver.c index 0efe5c57d..56eb1ca5e 100644 --- a/lib/format_text/archiver.c +++ b/lib/format_text/archiver.c @@ -335,6 +335,7 @@ int backup_restore_vg(struct cmd_context *cmd, struct volume_group *vg, int drop struct pv_list *pvl; struct format_instance *fid; struct format_instance_ctx fic; + struct pv_to_write *pvw; uint32_t tmp; /* @@ -363,6 +364,15 @@ int backup_restore_vg(struct cmd_context *cmd, struct volume_group *vg, int drop /* Add any metadata areas on the PVs */ dm_list_iterate_items(pvl, &vg->pvs) { + if (pvl->pv->fmt->features & FMT_PV_FLAGS) { + if (!(pvw = dm_pool_zalloc(vg->vgmem, sizeof(*pvw)))) { + log_error("pv_to_write allocation for '%s' failed", pv_dev_name(pvl->pv)); + return 0; + } + pvw->pv = pvl->pv; + dm_list_add(&vg->pvs_to_write, &pvw->list); + } + tmp = vg->extent_size; vg->extent_size = 0; if (!vg->fid->fmt->ops->pv_setup(vg->fid->fmt, pvl->pv, vg)) { diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c index 981bfbc96..9c0423eef 100644 --- a/lib/metadata/metadata.c +++ b/lib/metadata/metadata.c @@ -279,7 +279,8 @@ int add_pv_to_vg(struct volume_group *vg, const char *pv_name, break; } - if (pv->status & UNLABELLED_PV) { + if ((pv->fmt->features & FMT_PV_FLAGS) || + (pv->status & UNLABELLED_PV)) { if (!(pvw = dm_pool_zalloc(mem, sizeof(*pvw)))) { log_error("pv_to_write allocation for '%s' failed", pv_name); return 0;