1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-10-28 20:25:52 +03:00

Fix allocation policy loop so it doesn't continue beyond cling using later

policies it shouldn't be using when --alloc cling is specified but no tags
are defined.
This commit is contained in:
Alasdair Kergon 2012-05-11 22:19:12 +00:00
parent 01cfbe14f1
commit 8a689fd04d
2 changed files with 4 additions and 3 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.96 - 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. 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). 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. Fix division by zero if PV with zero PE count is used during vgcfgrestore.

View File

@ -2022,7 +2022,7 @@ static int _allocate(struct alloc_handle *ah,
ah->alloc = ALLOC_CLING_BY_TAGS; ah->alloc = ALLOC_CLING_BY_TAGS;
/* Attempt each defined allocation policy in turn */ /* 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 */ /* Skip cling_by_tags if no list defined */
if (alloc == ALLOC_CLING_BY_TAGS && !ah->cling_tag_list_cn) if (alloc == ALLOC_CLING_BY_TAGS && !ah->cling_tag_list_cn)
continue; 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)) if (!_find_max_parallel_space_for_one_policy(ah, &alloc_parms, pvms, &alloc_state))
goto_out; 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))) (!can_split && (alloc_state.allocated != old_allocated)))
break; break;
} }
@ -2154,7 +2154,7 @@ struct alloc_handle *allocate_extents(struct volume_group *vg,
return NULL; return NULL;
} }
if (alloc == ALLOC_INHERIT) if (alloc >= ALLOC_INHERIT)
alloc = vg->alloc; alloc = vg->alloc;
new_extents = (lv ? lv->le_count : 0) + extents; new_extents = (lv ? lv->le_count : 0) + extents;