[lvm-devel] endless loop in _free_vginfo
James M Leddy
james.leddy at redhat.com
Thu Mar 10 01:56:24 UTC 2011
Concerning the _free_vginfo function field in cache/lvmcache.c. It
looks like this code is supposed to traverse a list (list of vgs with
the same name?), but the assignment is the same on every
iteration. cache/lvmcache.c: 809
if (vginfo == primary_vginfo) {
dm_hash_remove(_vgname_hash, vginfo->vgname);
if (vginfo->next && !dm_hash_insert(_vgname_hash, vginfo->vgname,
vginfo->next)) {
log_error("_vgname_hash re-insertion for %s failed",
vginfo->vgname);
r = 0;
}
} else do
if (vginfo2->next == vginfo) {
vginfo2->next = vginfo->next;
break;
}
while ((vginfo2 = primary_vginfo->next));
Shouldn't it be this ?
diff -c /home/james/rpmbuild/lvm2/2.02.72-8.fc14.4/work/LVM2.2.02.72/lib/cache/lvmcache.c /tmp/buffer-content-2482n5q
--- /home/james/rpmbuild/lvm2/2.02.72-8.fc14.4/work/LVM2.2.02.72/lib/cache/lvmcache.c 2010-07-09 11:34:42.000000000 -0400
+++ /tmp/buffer-content-2482n5q 2011-03-09 20:42:39.946008936 -0500
@@ -819,7 +819,7 @@
vginfo2->next = vginfo->next;
break;
}
- while ((vginfo2 = primary_vginfo->next));
+ while ((vginfo2 = vginfo2->next));
if (vginfo->vgname)
dm_free(vginfo->vgname);
We ran into this when we have duplicate PV, probably also have a
duplicate VG if that is what exposes this bug.
--
James M. Leddy
Technical Account Manager
Red Hat Inc.
More information about the lvm-devel
mailing list