mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-26 14:04:15 +03:00
Add pv->vg to solidify link between a pv and a vg.
lvm2app needs a link back to the vg in order to use the vg handle for memory allocations as well as other things. This patch adds the field to struct physical_volume, and sets pv->vg when reading a vg from disk or extending a vg by using the helper function previously added, add_pvl_to_vgs(). Moves and renames are handled with separate code inside move_pv() and vgmerge(). Add pv->vg check to vg_validate(). A NULL value in pv->vg signifies membership in the orphan VG. Note though in the case of pv_read() on a device with metadatacopies == 0, more devices may need to be read for an authoritative answer. Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
This commit is contained in:
parent
efe3e72ed0
commit
5d7fd71373
@ -181,9 +181,20 @@ struct physical_volume {
|
||||
struct id id;
|
||||
struct device *dev;
|
||||
const struct format_type *fmt;
|
||||
|
||||
/*
|
||||
* vg_name and vgid are used before the parent VG struct exists.
|
||||
* FIXME: Investigate removal/substitution with 'vg' fields.
|
||||
*/
|
||||
const char *vg_name;
|
||||
struct id vgid;
|
||||
|
||||
/*
|
||||
* 'vg' is set and maintained when the PV belongs to a 'pvs'
|
||||
* list in a parent VG struct.
|
||||
*/
|
||||
struct volume_group *vg;
|
||||
|
||||
uint64_t status;
|
||||
uint64_t size;
|
||||
|
||||
|
@ -143,12 +143,14 @@ void add_pvl_to_vgs(struct volume_group *vg, struct pv_list *pvl)
|
||||
{
|
||||
dm_list_add(&vg->pvs, &pvl->list);
|
||||
vg->pv_count++;
|
||||
pvl->pv->vg = vg;
|
||||
}
|
||||
|
||||
void del_pvl_from_vgs(struct volume_group *vg, struct pv_list *pvl)
|
||||
{
|
||||
vg->pv_count--;
|
||||
dm_list_del(&pvl->list);
|
||||
pvl->pv->vg = NULL; /* orphan */
|
||||
}
|
||||
|
||||
|
||||
@ -2158,6 +2160,12 @@ int vg_validate(struct volume_group *vg)
|
||||
/* FIXME Dump list structure? */
|
||||
r = 0;
|
||||
}
|
||||
if (pvl->pv->vg != vg) {
|
||||
log_error(INTERNAL_ERROR "VG %s PV list entry points "
|
||||
"to different VG %s", vg->name,
|
||||
pvl->pv->vg ? pvl->pv->vg->name : "NULL");
|
||||
r = 0;
|
||||
}
|
||||
}
|
||||
|
||||
loop_counter1 = loop_counter2 = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user