diff options
author | David Teigland <teigland@redhat.com> | 2015-09-11 16:12:03 -0500 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2015-09-11 16:19:27 -0500 |
commit | 373d94945d54636ed2211630fe69cbeabee25ac3 (patch) | |
tree | 8af8dbece8f73e687af0375fdff22c19be88375a | |
parent | 8b8103efef9cc23eb8fe47cd7d16629560ffd2e3 (diff) | |
download | lvm2-dev-dct-vgcreate.tar.gz |
vgcreate: initialize new PVs in first vg_writedev-dct-vgcreate
When creating a lockd VG, vg_write() is called multiple
times. (The VG needs to exist before the lockd metadata
can be created, and after it is created it needs to be
written to the VG metadata.)
In the first vg_write(), non-PV devices need to be
turned into PVs, but not in the subsequent vg_write()
calls. This avoids repeating the same work more than
once.
-rw-r--r-- | lib/metadata/metadata.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c index b45f850fd..9bd42c91b 100644 --- a/lib/metadata/metadata.c +++ b/lib/metadata/metadata.c @@ -3011,7 +3011,7 @@ out: int vg_write(struct volume_group *vg) { struct dm_list *mdah; - struct pv_to_create *pv_to_create; + struct pv_to_create *pv_to_create, *pv_to_create_safe; struct metadata_area *mda; struct lv_list *lvl; int revert = 0, wrote = 0; @@ -3067,10 +3067,11 @@ int vg_write(struct volume_group *vg) memlock_unlock(vg->cmd); vg->seqno++; - dm_list_iterate_items(pv_to_create, &vg->pvs_to_create) { + dm_list_iterate_items_safe(pv_to_create, pv_to_create_safe, &vg->pvs_to_create) { if (!_pvcreate_write(vg->cmd, pv_to_create)) return 0; - } + dm_list_del(&pv_to_create->list); + } /* Write to each copy of the metadata area */ dm_list_iterate_items(mda, &vg->fid->metadata_areas_in_use) { |