summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2016-02-16 12:43:24 -0600
committerDavid Teigland <teigland@redhat.com>2016-02-17 13:25:03 -0600
commit33b4670e800683c6c7193a9e24ea83c4432a25cc (patch)
tree0abd5045642bdc64673fd4116cd89375f4b3ca13
parent055c628e38589bf1ea66bc0b2c5da36ed115b551 (diff)
downloadlvm2-33b4670e800683c6c7193a9e24ea83c4432a25cc.tar.gz
vg_write: add list of pvs to write
The vg->pv_write_list contains pv_list structs for which vg_write() should call pv_write(). The new list will replace vg->pvs_to_write that contains vg_to_create structs which are used to perform higher-level pvcreate-related operations. The higher level pvcreate operations will be moved out of vg_write() to higher levels.
-rw-r--r--lib/metadata/metadata.c9
-rw-r--r--lib/metadata/vg.c1
-rw-r--r--lib/metadata/vg.h4
3 files changed, 12 insertions, 2 deletions
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index ca7f9c72c..58752eb60 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -3133,7 +3133,8 @@ static int _check_old_pv_ext_for_vg(struct volume_group *vg)
int vg_write(struct volume_group *vg)
{
struct dm_list *mdah;
- struct pv_to_write *pv_to_write, *pv_to_write_safe;
+ struct pv_to_write *pv_to_write, *pv_to_write_safe;
+ struct pv_list *pvl, *pvl_safe;
struct metadata_area *mda;
struct lv_list *lvl;
int revert = 0, wrote = 0;
@@ -3194,6 +3195,12 @@ int vg_write(struct volume_group *vg)
memlock_unlock(vg->cmd);
vg->seqno++;
+ dm_list_iterate_items_safe(pvl, pvl_safe, &vg->pv_write_list) {
+ if (!pv_write(vg->cmd, pvl->pv, 1))
+ return_0;
+ dm_list_del(&pvl->list);
+ }
+
dm_list_iterate_items_safe(pv_to_write, pv_to_write_safe, &vg->pvs_to_write) {
if (!_pvcreate_write(vg->cmd, pv_to_write))
return_0;
diff --git a/lib/metadata/vg.c b/lib/metadata/vg.c
index e93108c34..1456fbb50 100644
--- a/lib/metadata/vg.c
+++ b/lib/metadata/vg.c
@@ -61,6 +61,7 @@ struct volume_group *alloc_vg(const char *pool_name, struct cmd_context *cmd,
dm_list_init(&vg->pvs);
dm_list_init(&vg->pvs_to_write);
+ dm_list_init(&vg->pv_write_list);
dm_list_init(&vg->pvs_outdated);
dm_list_init(&vg->lvs);
dm_list_init(&vg->tags);
diff --git a/lib/metadata/vg.h b/lib/metadata/vg.h
index f6c7bccb1..f41def8e7 100644
--- a/lib/metadata/vg.h
+++ b/lib/metadata/vg.h
@@ -91,7 +91,9 @@ struct volume_group {
* a PV label yet. They need to be pvcreate'd at vg_write time.
*/
- struct dm_list pvs_to_write;
+ struct dm_list pvs_to_write; /* struct pv_to_write */
+
+ struct dm_list pv_write_list; /* struct pv_list */
/*
* List of physical volumes that carry outdated metadata that belongs