summaryrefslogtreecommitdiffstats
path: root/libdm/mm
diff options
context:
space:
mode:
authorMilan Broz <mbroz@redhat.com>2009-04-02 15:02:18 +0000
committerMilan Broz <mbroz@redhat.com>2009-04-02 15:02:18 +0000
commitfe41c21be9752d58320da3e3bc8a5ad207f414db (patch)
treea9df11924cb56d490f85aa03db3454082aa047e1 /libdm/mm
parentec5703ea07789cd86cb6b7eef080ebb6dd92523d (diff)
downloadlvm2-fe41c21be9752d58320da3e3bc8a5ad207f414db.tar.gz
lvm2-fe41c21be9752d58320da3e3bc8a5ad207f414db.tar.xz
lvm2-fe41c21be9752d58320da3e3bc8a5ad207f414db.zip
Fix debug pool grow object to properly support delta=0
(It prints garbage for some reports)
Diffstat (limited to 'libdm/mm')
-rw-r--r--libdm/mm/pool-debug.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/libdm/mm/pool-debug.c b/libdm/mm/pool-debug.c
index 911f8e2b..1c3d999b 100644
--- a/libdm/mm/pool-debug.c
+++ b/libdm/mm/pool-debug.c
@@ -218,14 +218,19 @@ int dm_pool_begin_object(struct dm_pool *p, size_t init_size)
int dm_pool_grow_object(struct dm_pool *p, const void *extra, size_t delta)
{
struct block *new;
- size_t size = delta ? : strlen(extra);
+ size_t new_size;
+
+ if (!delta)
+ delta = strlen(extra);
assert(p->begun);
if (p->object)
- size += p->object->size;
+ new_size = delta + p->object->size;
+ else
+ new_size = delta;
- if (!(new = _new_block(size, DEFAULT_ALIGNMENT))) {
+ if (!(new = _new_block(new_size, DEFAULT_ALIGNMENT))) {
log_err("Couldn't extend object.");
return 0;
}
@@ -237,7 +242,7 @@ int dm_pool_grow_object(struct dm_pool *p, const void *extra, size_t delta)
}
p->object = new;
- memcpy(new->data + size - delta, extra, delta);
+ memcpy(new->data + new_size - delta, extra, delta);
return 1;
}