From d0de492ff3ffc1faaa6856a7e12665449039cdea Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Fri, 6 Jun 2008 11:12:50 +0000 Subject: [PATCH] cope with volatile vginfo in vg_read --- lib/cache/lvmcache.c | 3 +++ lib/metadata/metadata.c | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/cache/lvmcache.c b/lib/cache/lvmcache.c index 33b029566..77382d4c3 100644 --- a/lib/cache/lvmcache.c +++ b/lib/cache/lvmcache.c @@ -243,6 +243,9 @@ struct lvmcache_vginfo *vginfo_from_vgname(const char *vgname, const char *vgid) { struct lvmcache_vginfo *vginfo; + if (!vgname) + return vginfo_from_vgid(vgid); + if (!_vgname_hash) return NULL; diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c index ff05d7c12..d385814a8 100644 --- a/lib/metadata/metadata.c +++ b/lib/metadata/metadata.c @@ -1476,6 +1476,8 @@ static int _update_pv_list(struct list *all_pvs, struct volume_group *vg) * and call vg_read again). * * If precommitted is set, use precommitted metadata if present. + * + * Either of vgname or vgid may be NULL. */ static struct volume_group *_vg_read(struct cmd_context *cmd, const char *vgname, @@ -1522,6 +1524,10 @@ static struct volume_group *_vg_read(struct cmd_context *cmd, } } + /* Now determine the correct vgname if none was supplied */ + if (!vgname && !(vgname = vgname_from_vgid(cmd->mem, vgid))) + return_NULL; + if (use_precommitted && !(fmt->features & FMT_PRECOMMIT)) use_precommitted = 0; @@ -1752,7 +1758,7 @@ static struct volume_group *_vg_read_by_vgid(struct cmd_context *cmd, /* Is corresponding vgname already cached? */ if ((vginfo = vginfo_from_vgid(vgid)) && vginfo->vgname && !is_orphan_vg(vginfo->vgname)) { - if ((vg = _vg_read(cmd, vginfo->vgname, vgid, + if ((vg = _vg_read(cmd, NULL, vgid, &consistent, precommitted)) && !strncmp((char *)vg->id.uuid, vgid, ID_LEN)) { if (!consistent) {