]> sourceware.org Git - lvm2.git/commitdiff
Fix allocation policy loop so it doesn't continue beyond cling using later
authorAlasdair Kergon <agk@redhat.com>
Fri, 11 May 2012 22:19:12 +0000 (22:19 +0000)
committerAlasdair Kergon <agk@redhat.com>
Fri, 11 May 2012 22:19:12 +0000 (22:19 +0000)
policies it shouldn't be using when --alloc cling is specified but no tags
are defined.

WHATS_NEW
lib/metadata/lv_manip.c

index 6ee8eef4a93f5dd29e7ece83cec64fa95e65b4a9..68ab3af3173976efe1e06e2fc536ca082c39f1bd 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.96 - 
 ================================
+  Fix policy loop not to use later policies when --alloc cling without tags.
   Append _TO_LVSEG to names of internal A_CONTIGUOUS and A_CLING flags.
   Add missing pkg init --with-systemdsystemunitdir in configure.in (2.02.92).
   Fix division by zero if PV with zero PE count is used during vgcfgrestore.
index adc5e896e955c72b2f788bfc63f265728250694c..25d20af81cc1c9f8ce451424e7e7a4c875497bc3 100644 (file)
@@ -2022,7 +2022,7 @@ static int _allocate(struct alloc_handle *ah,
                ah->alloc = ALLOC_CLING_BY_TAGS;
 
        /* Attempt each defined allocation policy in turn */
-       for (alloc = ALLOC_CONTIGUOUS; alloc < ALLOC_INHERIT; alloc++) {
+       for (alloc = ALLOC_CONTIGUOUS; alloc <= ah->alloc; alloc++) {
                /* Skip cling_by_tags if no list defined */
                if (alloc == ALLOC_CLING_BY_TAGS && !ah->cling_tag_list_cn)
                        continue;
@@ -2039,7 +2039,7 @@ static int _allocate(struct alloc_handle *ah,
                if (!_find_max_parallel_space_for_one_policy(ah, &alloc_parms, pvms, &alloc_state))
                        goto_out;
 
-               if ((alloc_state.allocated == ah->new_extents && !alloc_state.log_area_count_still_needed) || (ah->alloc == alloc) ||
+               if ((alloc_state.allocated == ah->new_extents && !alloc_state.log_area_count_still_needed) ||
                    (!can_split && (alloc_state.allocated != old_allocated)))
                        break;
        }
@@ -2154,7 +2154,7 @@ struct alloc_handle *allocate_extents(struct volume_group *vg,
                return NULL;
        }
 
-       if (alloc == ALLOC_INHERIT)
+       if (alloc >= ALLOC_INHERIT)
                alloc = vg->alloc;
 
        new_extents = (lv ? lv->le_count : 0) + extents;
This page took 0.049871 seconds and 5 git commands to generate.