1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

alloc: use own mem pool for alloc_handle

Keep alloc_handle's data in a single mempool and do not
spread them into vgmem pool.
This commit is contained in:
Zdenek Kabelac 2015-11-04 14:54:07 +01:00
parent 0c380c316c
commit 07046e994f
2 changed files with 11 additions and 9 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.135 - Version 2.02.135 -
==================================== ====================================
Use local memory pool for whole alloc_handle manipulation.
Add missing pointer validation after dm_get_next_target(). Add missing pointer validation after dm_get_next_target().
Do not deref NULL pointer in debug message for _match_pv_tags(). Do not deref NULL pointer in debug message for _match_pv_tags().
Drop unneeded stat() call when checking for sysfs file. Drop unneeded stat() call when checking for sysfs file.

View File

@ -3138,7 +3138,6 @@ int lv_add_virtual_segment(struct logical_volume *lv, uint64_t status,
* If log_area_count > 1 it is always mirrored (not striped). * If log_area_count > 1 it is always mirrored (not striped).
*/ */
static struct alloc_handle *_alloc_init(struct cmd_context *cmd, static struct alloc_handle *_alloc_init(struct cmd_context *cmd,
struct dm_pool *mem,
const struct segment_type *segtype, const struct segment_type *segtype,
alloc_policy_t alloc, int approx_alloc, alloc_policy_t alloc, int approx_alloc,
uint32_t existing_extents, uint32_t existing_extents,
@ -3150,6 +3149,7 @@ static struct alloc_handle *_alloc_init(struct cmd_context *cmd,
uint32_t region_size, uint32_t region_size,
struct dm_list *parallel_areas) struct dm_list *parallel_areas)
{ {
struct dm_pool *mem;
struct alloc_handle *ah; struct alloc_handle *ah;
uint32_t s, area_count, alloc_count, parity_count, total_extents; uint32_t s, area_count, alloc_count, parity_count, total_extents;
size_t size = 0; size_t size = 0;
@ -3199,21 +3199,23 @@ static struct alloc_handle *_alloc_init(struct cmd_context *cmd,
size += sizeof(ah->alloced_areas[0]) * alloc_count; size += sizeof(ah->alloced_areas[0]) * alloc_count;
if (!(mem = dm_pool_create("allocation", 1024))) {
log_error("allocation pool creation failed");
return NULL;
}
if (!(ah = dm_pool_zalloc(mem, size))) { if (!(ah = dm_pool_zalloc(mem, size))) {
log_error("allocation handle allocation failed"); log_error("allocation handle allocation failed");
dm_pool_destroy(mem);
return NULL; return NULL;
} }
ah->cmd = cmd; ah->cmd = cmd;
ah->mem = mem;
if (segtype_is_virtual(segtype)) if (segtype_is_virtual(segtype))
return ah; return ah;
if (!(ah->mem = dm_pool_create("allocation", 1024))) {
log_error("allocation pool creation failed");
return NULL;
}
ah->area_count = area_count; ah->area_count = area_count;
ah->parity_count = parity_count; ah->parity_count = parity_count;
ah->region_size = region_size; ah->region_size = region_size;
@ -3314,8 +3316,7 @@ static struct alloc_handle *_alloc_init(struct cmd_context *cmd,
void alloc_destroy(struct alloc_handle *ah) void alloc_destroy(struct alloc_handle *ah)
{ {
if (ah->mem) dm_pool_destroy(ah->mem);
dm_pool_destroy(ah->mem);
} }
/* /*
@ -3356,7 +3357,7 @@ struct alloc_handle *allocate_extents(struct volume_group *vg,
if (alloc >= ALLOC_INHERIT) if (alloc >= ALLOC_INHERIT)
alloc = vg->alloc; alloc = vg->alloc;
if (!(ah = _alloc_init(vg->cmd, vg->vgmem, segtype, alloc, approx_alloc, if (!(ah = _alloc_init(vg->cmd, segtype, alloc, approx_alloc,
lv ? lv->le_count : 0, extents, mirrors, stripes, log_count, lv ? lv->le_count : 0, extents, mirrors, stripes, log_count,
vg->extent_size, region_size, vg->extent_size, region_size,
parallel_areas))) parallel_areas)))