From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15712 invoked by alias); 6 Jun 2008 11:12:51 -0000 Received: (qmail 15698 invoked by uid 9447); 6 Jun 2008 11:12:51 -0000 Date: Fri, 06 Jun 2008 11:12:00 -0000 Message-ID: <20080606111251.15696.qmail@sourceware.org> From: agk@sourceware.org To: lvm-devel@redhat.com, lvm2-cvs@sourceware.org Subject: LVM2/lib cache/lvmcache.c metadata/metadata.c Mailing-List: contact lvm2-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: lvm2-cvs-owner@sourceware.org X-SW-Source: 2008-06/txt/msg00009.txt.bz2 CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2008-06-06 11:12:50 Modified files: lib/cache : lvmcache.c lib/metadata : metadata.c Log message: cope with volatile vginfo in vg_read Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/cache/lvmcache.c.diff?cvsroot=lvm2&r1=1.54&r2=1.55 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.177&r2=1.178 --- LVM2/lib/cache/lvmcache.c 2008/06/05 14:24:28 1.54 +++ LVM2/lib/cache/lvmcache.c 2008/06/06 11:12:50 1.55 @@ -243,6 +243,9 @@ { struct lvmcache_vginfo *vginfo; + if (!vgname) + return vginfo_from_vgid(vgid); + if (!_vgname_hash) return NULL; --- LVM2/lib/metadata/metadata.c 2008/06/06 09:48:04 1.177 +++ LVM2/lib/metadata/metadata.c 2008/06/06 11:12:50 1.178 @@ -1476,6 +1476,8 @@ * 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 @@ } } + /* 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 @@ /* 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) {