From 847e2856a29c41756cc5bbaf70eb87ea030826f4 Mon Sep 17 00:00:00 2001 From: Peter Rajnoha Date: Mon, 27 Aug 2012 14:19:30 +0200 Subject: [PATCH] config: require dm_config_create_value for dm_config_node's value If we were defining a section (which is a node without a value) and the value was created automatically on dm_config_create_node call, we were wasting resources as the next step after creating the config node itself was assigning NULL for the node's value. The dm_config_node_create + dm_config_create_value sequence should be used instead for settings and dm_config_node_create alone for sections. The majority of the code already used the correct sequence. Though with dm_config_node_create fn creating the value as well, the pool memory was being trashed this way. This patch removes the node value initialization on dm_config_create_node fn call and keeps it for the direct dm_config_create_value fn call. --- WHATS_NEW_DM | 1 + daemons/lvmetad/lvmetad-core.c | 7 +++++++ libdm/libdm-config.c | 9 ++------- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM index d0e8f7df1..c46db61e7 100644 --- a/WHATS_NEW_DM +++ b/WHATS_NEW_DM @@ -1,5 +1,6 @@ Version 1.02.77 - ================================= + Don't create value for dm_config_node and require dm_config_create_value call. Check for existing new_name for dmsetup rename. Fix memory leak in dmsetup _get_split_name() error path. diff --git a/daemons/lvmetad/lvmetad-core.c b/daemons/lvmetad/lvmetad-core.c index 3ca3fd52e..146ee6986 100644 --- a/daemons/lvmetad/lvmetad-core.c +++ b/daemons/lvmetad/lvmetad-core.c @@ -520,12 +520,19 @@ static response vg_lookup(lvmetad_state *s, request r) if (!(res.cft->root = n = dm_config_create_node(res.cft, "response"))) goto bad; + if (!(n->v = dm_config_create_value(cft))) + goto bad; + n->parent = res.cft->root; n->v->type = DM_CFG_STRING; n->v->v.str = "OK"; if (!(n = n->sib = dm_config_create_node(res.cft, "name"))) goto bad; + + if (!(n->v = dm_config_create_value(res.cft))) + goto bad; + n->parent = res.cft->root; n->v->type = DM_CFG_STRING; n->v->v.str = name; diff --git a/libdm/libdm-config.c b/libdm/libdm-config.c index f8c095477..c19f51d71 100644 --- a/libdm/libdm-config.c +++ b/libdm/libdm-config.c @@ -1169,14 +1169,9 @@ struct dm_config_node *dm_config_create_node(struct dm_config_tree *cft, const c log_error("Failed to create config node's key."); return NULL; } - if (!(cn->v = _create_value(cft->mem))) { - log_error("Failed to create config node's value."); - return NULL; - } cn->parent = NULL; - cn->v->type = DM_CFG_INT; - cn->v->v.i = 0; - cn->v->next = NULL; + cn->v = NULL; + return cn; }