summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2015-09-11 16:12:03 -0500
committerDavid Teigland <teigland@redhat.com>2015-09-11 16:19:27 -0500
commit373d94945d54636ed2211630fe69cbeabee25ac3 (patch)
tree8af8dbece8f73e687af0375fdff22c19be88375a
parent8b8103efef9cc23eb8fe47cd7d16629560ffd2e3 (diff)
downloadlvm2-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.c7
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) {