diff --git a/lib/format1/disk-rep.c b/lib/format1/disk-rep.c index 950ef018b..64e1ff05e 100644 --- a/lib/format1/disk-rep.c +++ b/lib/format1/disk-rep.c @@ -255,21 +255,21 @@ static int _read_extents(struct disk_list *data) /* * If exported, remove "PV_EXP" from end of VG name */ -static void _munge_exported_vg(struct disk_list *data) +void munge_exported_vg(struct pv_disk *pvd, struct vg_disk *vgd) { int l; size_t s; /* Return if PV not in a VG or VG not exported */ - if ((!*data->pvd.vg_name) || !(data->vgd.vg_status & VG_EXPORTED)) + if ((!*pvd->vg_name) || (vgd && !(vgd->vg_status & VG_EXPORTED))) return; - l = strlen(data->pvd.vg_name); + l = strlen(pvd->vg_name); s = sizeof(EXPORTED_TAG); - if (!strncmp(data->pvd.vg_name + l - s + 1, EXPORTED_TAG, s)) - data->pvd.vg_name[l - s + 1] = '\0'; + if (!strncmp(pvd->vg_name + l - s + 1, EXPORTED_TAG, s)) + pvd->vg_name[l - s + 1] = '\0'; - data->pvd.pv_status |= VG_EXPORTED; + pvd->pv_status |= VG_EXPORTED; } static struct disk_list *__read_disk(const struct format_type *fmt, @@ -295,6 +295,9 @@ static struct disk_list *__read_disk(const struct format_type *fmt, goto bad; } + /* If VG is exported, set VG name back to the real name */ + munge_exported_vg(&dl->pvd, &dl->vgd); + if (!(info = lvmcache_add(fmt->labeller, dl->pvd.pv_uuid, dev, dl->pvd.vg_name, NULL))) stack; @@ -321,9 +324,6 @@ static struct disk_list *__read_disk(const struct format_type *fmt, goto bad; } - /* If VG is exported, set VG name back to the real name */ - _munge_exported_vg(dl); - /* Update VG cache with what we found */ /* vgcache_add(dl->pvd.vg_name, dl->vgd.vg_uuid, dev, fmt); */ diff --git a/lib/format1/disk-rep.h b/lib/format1/disk-rep.h index 19ddfc466..ac484dc37 100644 --- a/lib/format1/disk-rep.h +++ b/lib/format1/disk-rep.h @@ -224,6 +224,7 @@ int export_uuids(struct disk_list *dl, struct volume_group *vg); void export_numbers(struct list *pvds, struct volume_group *vg); void export_pv_act(struct list *pvds); +void munge_exported_vg(struct pv_disk *pvd, struct vg_disk *vgd); /* blech */ int get_free_vg_number(struct format_instance *fid, struct dev_filter *filter, diff --git a/lib/format1/lvm1-label.c b/lib/format1/lvm1-label.c index 10226dad8..df96a67f3 100644 --- a/lib/format1/lvm1-label.c +++ b/lib/format1/lvm1-label.c @@ -51,6 +51,7 @@ static int _read(struct labeller *l, struct device *dev, char *buf, struct pv_disk *pvd = (struct pv_disk *) buf; struct lvmcache_info *info; + munge_exported_vg(pvd, NULL); if (!(info = lvmcache_add(l, pvd->pv_uuid, dev, pvd->vg_name, NULL))) return 0; *label = info->label;