summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Rockai <prockai@redhat.com>2015-04-29 15:01:20 +0200
committerPetr Rockai <prockai@redhat.com>2015-05-20 19:46:14 +0200
commite8d00e068762d0ebd7dd489d45c43927b7ffdc58 (patch)
treee4463d82a3358dae3b774d64199e41430cc672d7
parent55f33696928728e60f15dc7a557e55bf910dabdd (diff)
downloadlvm2-e8d00e068762d0ebd7dd489d45c43927b7ffdc58.tar.gz
lvmetad: Set up lvmcache & PV structs for outdated_pvs.
-rw-r--r--lib/cache/lvmetad.c43
1 files changed, 31 insertions, 12 deletions
diff --git a/lib/cache/lvmetad.c b/lib/cache/lvmetad.c
index a66f91548..68162b65e 100644
--- a/lib/cache/lvmetad.c
+++ b/lib/cache/lvmetad.c
@@ -395,6 +395,22 @@ static int _pv_populate_lvmcache(struct cmd_context *cmd,
return 1;
}
+static int _pv_update_struct_pv(struct physical_volume *pv, struct format_instance *fid)
+{
+ struct lvmcache_info *info;
+ if ((info = lvmcache_info_from_pvid((const char *)&pv->id, 0))) {
+ pv->label_sector = lvmcache_get_label(info)->sector;
+ pv->dev = lvmcache_device(info);
+ if (!pv->dev)
+ pv->status |= MISSING_PV;
+ if (!lvmcache_fid_add_mdas_pv(info, fid))
+ return_0;
+ pv->fid = fid;
+ } else
+ pv->status |= MISSING_PV; /* probably missing */
+ return 1;
+}
+
struct volume_group *lvmetad_vg_lookup(struct cmd_context *cmd, const char *vgname, const char *vgid)
{
struct volume_group *vg = NULL;
@@ -409,7 +425,6 @@ struct volume_group *lvmetad_vg_lookup(struct cmd_context *cmd, const char *vgna
struct format_type *fmt;
struct dm_config_node *pvcn;
struct pv_list *pvl;
- struct lvmcache_info *info;
if (!lvmetad_active())
return NULL;
@@ -460,22 +475,26 @@ struct volume_group *lvmetad_vg_lookup(struct cmd_context *cmd, const char *vgna
for (pvcn = pvcn->child; pvcn; pvcn = pvcn->sib)
_pv_populate_lvmcache(cmd, pvcn, fmt, 0);
+ if ((pvcn = dm_config_find_node(top, "metadata/outdated_pvs")))
+ for (pvcn = pvcn->child; pvcn; pvcn = pvcn->sib)
+ _pv_populate_lvmcache(cmd, pvcn, fmt, 0);
+
top->key = name;
if (!(vg = import_vg_from_config_tree(reply.cft, fid)))
goto_out;
dm_list_iterate_items(pvl, &vg->pvs) {
- if ((info = lvmcache_info_from_pvid((const char *)&pvl->pv->id, 0))) {
- pvl->pv->label_sector = lvmcache_get_label(info)->sector;
- pvl->pv->dev = lvmcache_device(info);
- if (!pvl->pv->dev)
- pvl->pv->status |= MISSING_PV;
- if (!lvmcache_fid_add_mdas_pv(info, fid)) {
- vg = NULL;
- goto_out; /* FIXME error path */
- }
- } else
- pvl->pv->status |= MISSING_PV; /* probably missing */
+ if (!_pv_update_struct_pv(pvl->pv, fid)) {
+ vg = NULL;
+ goto_out; /* FIXME error path */
+ }
+ }
+
+ dm_list_iterate_items(pvl, &vg->pvs_outdated) {
+ if (!_pv_update_struct_pv(pvl->pv, fid)) {
+ vg = NULL;
+ goto_out; /* FIXME error path */
+ }
}
lvmcache_update_vg(vg, 0);