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-14 13:22:22 -0500
commit2ce8ee0214c84a4afd12589bbe2fe521c2518b87 (patch)
treea82b38e3664f71ee160e26694d93a1d872daaaa1
parentcee9ed22441187a2a3a6290d1e07428df0171144 (diff)
downloadlvm2-2ce8ee0214c84a4afd12589bbe2fe521c2518b87.tar.gz
vgcreate: initialize new PVs only in first vg_write
When a command does a sequence of vg_write + vg_commit + vg_write + vg_commit, initialization of non-PV devices happens during the first vg_write, and does not need to be repeated by the second vg_write. When creating a lockd VG, this sequence occurs because the VG is first created, then the lockd data is created, then the lockd data is then written to the VG metadata.
-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) {