summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Rajnoha <prajnoha@redhat.com>2016-03-21 14:38:49 +0100
committerPeter Rajnoha <prajnoha@redhat.com>2016-03-21 14:39:11 +0100
commitf231bdb20bdc885460dfc49db744147bb1bc90da (patch)
treeebe300c8769ca0dd36c612cafa41c39ab78dec8f
parent03b0a786403ad1762bfbbe354756a9b83ee6629c (diff)
downloadlvm2-f231bdb20bdc885460dfc49db744147bb1bc90da.tar.gz
metadata: use own mem pool to report PV device mismatch in VG
-rw-r--r--lib/metadata/metadata.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index 86fb7cdec..2c5ede5e3 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -4582,9 +4582,8 @@ static struct volume_group *_vg_read(struct cmd_context *cmd,
#define DEV_LIST_DELIM ", "
-static int _check_devs_used_correspond_with_lv(struct dm_list *list, struct logical_volume *lv)
+static int _check_devs_used_correspond_with_lv(struct dm_pool *mem, struct dm_list *list, struct logical_volume *lv)
{
- struct dm_pool *mem = lv->vg->vgmem;
struct device_list *dl;
int found_inconsistent = 0;
struct device *dev;
@@ -4657,6 +4656,7 @@ bad:
static int _check_devs_used_correspond_with_vg(struct volume_group *vg)
{
+ struct dm_pool *mem;
char vgid[ID_LEN + 1];
struct pv_list *pvl;
struct lv_list *lvl;
@@ -4689,10 +4689,17 @@ static int _check_devs_used_correspond_with_vg(struct volume_group *vg)
}
if (found_inconsistent) {
+ if (!(mem = dm_pool_create("vg_devs_check", 1024)))
+ return_0;
+
dm_list_iterate_items(lvl, &vg->lvs) {
- if (!_check_devs_used_correspond_with_lv(list, lvl->lv))
+ if (!_check_devs_used_correspond_with_lv(mem, list, lvl->lv)) {
+ dm_pool_destroy(mem);
return_0;
+ }
}
+
+ dm_pool_destroy(mem);
}
return 1;