From 948ee3e39657a46278761dee837b9728906cd7ab Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Tue, 12 Dec 2006 19:30:10 +0000 Subject: [PATCH] Fix detection of smallest area in _alloc_parallel_area() for cling policy. --- WHATS_NEW | 1 + lib/metadata/lv_manip.c | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index 5c5b49927..e6af77db6 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.17 - =================================== + Fix detection of smallest area in _alloc_parallel_area() for cling policy. Add manpage entry for clvmd -T Fix gulm operation of clvmd, including a hang when doing lvchange -aey Fix hang in clvmd if a pre-command failed. diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c index aa47ded58..bcea7a5d7 100644 --- a/lib/metadata/lv_manip.c +++ b/lib/metadata/lv_manip.c @@ -628,17 +628,17 @@ static int _alloc_parallel_area(struct alloc_handle *ah, uint32_t needed, struct pv_area **areas, uint32_t *ix, struct pv_area *log_area) { - uint32_t area_len, smallest, remaining; + uint32_t area_len, remaining; uint32_t s; struct alloced_area *aa; remaining = needed - *ix; area_len = remaining / ah->area_multiple; - smallest = areas[ah->area_count - 1]->count; - - if (area_len > smallest) - area_len = smallest; + /* Reduce area_len to the smallest of the areas */ + for (s = 0; s < ah->area_count; s++) + if (area_len > areas[s]->count) + area_len = areas[s]->count; if (!(aa = dm_pool_alloc(ah->mem, sizeof(*aa) * (ah->area_count + (log_area ? 1 : 0))))) {