From: Peter Rajnoha Date: Fri, 11 Mar 2011 15:06:13 +0000 (+0000) Subject: Call destroy_instance for any PVs found in VG structure during vg_free call. X-Git-Tag: v2_02_91~996 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=2feb2a66fddc205363ea87224580c12c1a58cf59;p=lvm2.git Call destroy_instance for any PVs found in VG structure during vg_free call. This is necessary for proper format instance ref_count support. We iterate over vg->pvs and vg->removed_pvs list and the ref_count is decremented and then it is destroyed if not referenced anymore. --- diff --git a/WHATS_NEW b/WHATS_NEW index 606a20ad1..9b8c79bba 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.85 - =================================== + Call destroy_instance for any PVs found in VG structure during vg_free call. Add new free_pv_fid fn and use it throughout to free all attached fids. Use only vg_set_fid and new pv_set_fid fn to assign the format instance. Make create_text_context fn static and move it inside create_instance fn. diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c index a7553a547..d1035e539 100644 --- a/lib/metadata/metadata.c +++ b/lib/metadata/metadata.c @@ -3243,9 +3243,20 @@ void free_pv_fid(struct physical_volume *pv) void free_vg(struct volume_group *vg) { + struct pv_list *pvl; + if (!vg) return; + dm_list_iterate_items(pvl, &vg->pvs) + pvl->pv->fid->fmt->ops->destroy_instance(pvl->pv->fid); + + dm_list_iterate_items(pvl, &vg->removed_pvs) + pvl->pv->fid->fmt->ops->destroy_instance(pvl->pv->fid); + + if (vg->fid) + vg->fid->fmt->ops->destroy_instance(vg->fid); + if (vg->cmd && vg->vgmem == vg->cmd->mem) { log_error(INTERNAL_ERROR "global memory pool used for VG %s", vg->name);