mirror of
git://sourceware.org/git/lvm2.git
synced 2025-02-07 05:58:00 +03:00
Ensure fid mda lists are populated correctly during vgextend.
The vgextend path calls add_pv_to_vg(). Inside add_pv_to_vg(), we must ensure we pass the correct mdas list into pv_setup(), as copies of mdas are placed on the vg->fid list. If we don't place the mdas on the correct vg->fid list, the various counts may be incorrect and the metadata balance algorithm will not work when called from vg_write() path. Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
This commit is contained in:
parent
9e111ef67a
commit
f61cd7b249
@ -174,6 +174,7 @@ int add_pv_to_vg(struct volume_group *vg, const char *pv_name,
|
||||
struct format_instance *fid = vg->fid;
|
||||
struct dm_pool *mem = vg->vgmem;
|
||||
char uuid[64] __attribute((aligned(8)));
|
||||
struct dm_list *mdas;
|
||||
|
||||
log_verbose("Adding physical volume '%s' to volume group '%s'",
|
||||
pv_name, vg->name);
|
||||
@ -217,9 +218,24 @@ int add_pv_to_vg(struct volume_group *vg, const char *pv_name,
|
||||
*/
|
||||
pv->pe_alloc_count = 0;
|
||||
|
||||
/*
|
||||
* FIXME: this does not work entirely correctly in the case where a PV
|
||||
* has 2 mdas and only one is ignored; ideally all non-ignored mdas
|
||||
* should be placed on metadata_areas list and ignored on the
|
||||
* metadata_areas_ignored list; however this requires another
|
||||
* fairly complex refactoring to remove the 'mdas' parameter from both
|
||||
* pv_setup and pv_write. For now, we only put ignored mdas on the
|
||||
* metadata_areas_ignored list if all mdas in the PV are ignored;
|
||||
* otherwise, we use the non-ignored list.
|
||||
*/
|
||||
if (!pv_mda_used_count(pv))
|
||||
mdas = &fid->metadata_areas_ignored;
|
||||
else
|
||||
mdas = &fid->metadata_areas_in_use;
|
||||
|
||||
if (!fid->fmt->ops->pv_setup(fid->fmt, UINT64_C(0), 0,
|
||||
vg->extent_size, 0, 0, 0UL, UINT64_C(0),
|
||||
&fid->metadata_areas_in_use, pv, vg)) {
|
||||
mdas, pv, vg)) {
|
||||
log_error("Format-specific setup of physical volume '%s' "
|
||||
"failed.", pv_name);
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user