[lvm-devel] master - alloc: use own mem pool for alloc_handle
Zdenek Kabelac
zkabelac at fedoraproject.org
Mon Nov 9 09:28:47 UTC 2015
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=07046e994fc10882cac20d16666368a6de18a528
Commit: 07046e994fc10882cac20d16666368a6de18a528
Parent: 0c380c316c51920db5b5721863cb1b55bfa9acf1
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Wed Nov 4 14:54:07 2015 +0100
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Mon Nov 9 10:22:49 2015 +0100
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.
---
WHATS_NEW | 1 +
lib/metadata/lv_manip.c | 19 ++++++++++---------
2 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index 00b7ee1..7dc5a45 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.135 -
====================================
+ Use local memory pool for whole alloc_handle manipulation.
Add missing pointer validation after dm_get_next_target().
Do not deref NULL pointer in debug message for _match_pv_tags().
Drop unneeded stat() call when checking for sysfs file.
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index c9cc6b5..48f470e 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -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).
*/
static struct alloc_handle *_alloc_init(struct cmd_context *cmd,
- struct dm_pool *mem,
const struct segment_type *segtype,
alloc_policy_t alloc, int approx_alloc,
uint32_t existing_extents,
@@ -3150,6 +3149,7 @@ static struct alloc_handle *_alloc_init(struct cmd_context *cmd,
uint32_t region_size,
struct dm_list *parallel_areas)
{
+ struct dm_pool *mem;
struct alloc_handle *ah;
uint32_t s, area_count, alloc_count, parity_count, total_extents;
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;
+ if (!(mem = dm_pool_create("allocation", 1024))) {
+ log_error("allocation pool creation failed");
+ return NULL;
+ }
+
if (!(ah = dm_pool_zalloc(mem, size))) {
log_error("allocation handle allocation failed");
+ dm_pool_destroy(mem);
return NULL;
}
ah->cmd = cmd;
+ ah->mem = mem;
if (segtype_is_virtual(segtype))
return ah;
- if (!(ah->mem = dm_pool_create("allocation", 1024))) {
- log_error("allocation pool creation failed");
- return NULL;
- }
-
ah->area_count = area_count;
ah->parity_count = parity_count;
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)
{
- 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)
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,
vg->extent_size, region_size,
parallel_areas)))
More information about the lvm-devel
mailing list