[lvm-devel] [PATCH] Fix log allocation segfault
Milan Broz
mbroz at redhat.com
Sun May 31 20:45:56 UTC 2009
Fix log allocation segfault.
If there is no free area for log, code should break the loop.
(Otherwise it uses uninitializes areas later.)
Easily reproducible using lvconvert --repair
- kill device with log
- run lvconvert --repair vg/lv (with no PV usable for log)
(patch just reintroduces part of previous code)
Signed-off-by: Milan Broz <mbroz at redhat.com>
---
lib/metadata/lv_manip.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 79407ae..3e64f48 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -1124,6 +1124,10 @@ static int _find_parallel_space(struct alloc_handle *ah, alloc_policy_t alloc,
if ((contiguous || cling) && (preferred_count < ix_offset))
break;
+ if (ix + ix_offset < ah->area_count +
+ ((ah->log_count && !ah->log_area.len) ? ah->log_count : 0))
+ break;
+
/* sort the areas so we allocate from the biggest */
if (ix > 1)
qsort(areas + ix_offset, ix, sizeof(*areas),
More information about the lvm-devel
mailing list