|
|
abb29f |
WHATS_NEW | 10 ++++++++--
|
|
|
abb29f |
lib/metadata/lv_manip.c | 10 +++++++---
|
|
|
abb29f |
2 files changed, 11 insertions(+), 3 deletions(-)
|
|
|
abb29f |
|
|
|
abb29f |
diff --git a/WHATS_NEW b/WHATS_NEW
|
|
|
abb29f |
index 452a631..fe347f7 100644
|
|
|
abb29f |
--- a/WHATS_NEW
|
|
|
abb29f |
+++ b/WHATS_NEW
|
|
|
abb29f |
@@ -1,3 +1,7 @@
|
|
|
abb29f |
+Version 2.03.12 -
|
|
|
abb29f |
+===================================
|
|
|
abb29f |
+ Fix corner case allocation for thin-pools.
|
|
|
abb29f |
+
|
|
|
abb29f |
Version 2.03.11 - 08th January 2021
|
|
|
abb29f |
===================================
|
|
|
abb29f |
Fix pvck handling MDA at offset different from 4096.
|
|
|
abb29f |
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
|
|
|
abb29f |
index 7046436..443d32c 100644
|
|
|
abb29f |
--- a/lib/metadata/lv_manip.c
|
|
|
abb29f |
+++ b/lib/metadata/lv_manip.c
|
|
|
abb29f |
@@ -1850,11 +1850,13 @@ static uint32_t _mirror_log_extents(uint32_t region_size, uint32_t pe_size, uint
|
|
|
abb29f |
|
|
|
abb29f |
/* Is there enough total space or should we give up immediately? */
|
|
|
abb29f |
static int _sufficient_pes_free(struct alloc_handle *ah, struct dm_list *pvms,
|
|
|
abb29f |
- uint32_t allocated, uint32_t extents_still_needed)
|
|
|
abb29f |
+ uint32_t allocated, uint32_t log_still_needed,
|
|
|
abb29f |
+ uint32_t extents_still_needed)
|
|
|
abb29f |
{
|
|
|
abb29f |
uint32_t area_extents_needed = (extents_still_needed - allocated) * ah->area_count / ah->area_multiple;
|
|
|
abb29f |
uint32_t parity_extents_needed = (extents_still_needed - allocated) * ah->parity_count / ah->area_multiple;
|
|
|
abb29f |
- uint32_t metadata_extents_needed = ah->alloc_and_split_meta ? 0 : ah->metadata_area_count * RAID_METADATA_AREA_LEN + ah->log_len; /* One each */
|
|
|
abb29f |
+ uint32_t metadata_extents_needed = (ah->alloc_and_split_meta ? 0 : ah->metadata_area_count * RAID_METADATA_AREA_LEN) +
|
|
|
abb29f |
+ (log_still_needed ? ah->log_len : 0); /* One each */
|
|
|
abb29f |
uint64_t total_extents_needed = (uint64_t)area_extents_needed + parity_extents_needed + metadata_extents_needed;
|
|
|
abb29f |
uint32_t free_pes = pv_maps_size(pvms);
|
|
|
abb29f |
|
|
|
abb29f |
@@ -3359,7 +3361,9 @@ static int _allocate(struct alloc_handle *ah,
|
|
|
abb29f |
old_allocated = alloc_state.allocated;
|
|
|
abb29f |
log_debug_alloc("Trying allocation using %s policy.", get_alloc_string(alloc));
|
|
|
abb29f |
|
|
|
abb29f |
- if (!ah->approx_alloc && !_sufficient_pes_free(ah, pvms, alloc_state.allocated, ah->new_extents))
|
|
|
abb29f |
+ if (!ah->approx_alloc && !_sufficient_pes_free(ah, pvms, alloc_state.allocated,
|
|
|
abb29f |
+ alloc_state.log_area_count_still_needed,
|
|
|
abb29f |
+ ah->new_extents))
|
|
|
abb29f |
goto_out;
|
|
|
abb29f |
|
|
|
abb29f |
_init_alloc_parms(ah, &alloc_parms, alloc, prev_lvseg,
|