mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-06 00:58:48 +03:00
allocation: report allocation error instead of crash
Current allocation limitation requires to fit metadata/log LV on a single PV. This is usually not a big problem, but since thin-pool and cache-pool is using this for allocating extents for their metadata LVs it might be eventually causing errors where the remaining free spaces for large metadata size is spread over several PV.
This commit is contained in:
parent
45f0c48365
commit
be0bf43d74
@ -2109,15 +2109,18 @@ static int _alloc_parallel_area(struct alloc_handle *ah, uint32_t max_to_allocat
|
||||
aa[smeta].pv = pva->map->pv;
|
||||
aa[smeta].pe = pva->start;
|
||||
aa[smeta].len = ah->log_len;
|
||||
|
||||
if (aa[smeta].len > pva->count) {
|
||||
log_error("Metadata does not fit on a single PV.");
|
||||
return 0;
|
||||
}
|
||||
log_debug_alloc("Allocating parallel metadata area %" PRIu32
|
||||
" on %s start PE %" PRIu32
|
||||
" length %" PRIu32 ".",
|
||||
(smeta - (ah->area_count + ah->parity_count)),
|
||||
pv_dev_name(aa[smeta].pv), aa[smeta].pe,
|
||||
ah->log_len);
|
||||
aa[smeta].len);
|
||||
|
||||
consume_pv_area(pva, ah->log_len);
|
||||
consume_pv_area(pva, aa[smeta].len);
|
||||
dm_list_add(&ah->alloced_areas[smeta], &aa[smeta].list);
|
||||
}
|
||||
aa[s].len = (ah->alloc_and_split_meta && !ah->split_metadata_is_allocated) ? len - ah->log_len : len;
|
||||
|
Loading…
x
Reference in New Issue
Block a user