mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
Fix memory pool leak.
Call the alloc_destory call always after finishing operation with handle otherwise it will leak a memory pool. Also fix return code in lv_extend.
This commit is contained in:
parent
6d1208546d
commit
e24f357c23
@ -1,5 +1,6 @@
|
||||
Version 2.02.46 -
|
||||
================================
|
||||
Fix memory leak in mirror allocation code.
|
||||
Save and restore the previous logging level when log level is changed.
|
||||
Fix error message when archive initialization fails.
|
||||
Make sure clvmd-corosync releases the lockspace when it exits.
|
||||
|
@ -1608,16 +1608,12 @@ int lv_extend(struct logical_volume *lv,
|
||||
extents, allocatable_pvs, alloc, NULL)))
|
||||
return_0;
|
||||
|
||||
if (mirrors < 2) {
|
||||
if (!lv_add_segment(ah, 0, ah->area_count, lv, segtype, stripe_size,
|
||||
status, 0, NULL))
|
||||
goto_out;
|
||||
} else {
|
||||
if (!_lv_extend_mirror(ah, lv, extents, 0))
|
||||
return_0;
|
||||
}
|
||||
if (mirrors < 2)
|
||||
r = lv_add_segment(ah, 0, ah->area_count, lv, segtype,
|
||||
stripe_size, status, 0, NULL);
|
||||
else
|
||||
r = _lv_extend_mirror(ah, lv, extents, 0);
|
||||
|
||||
out:
|
||||
alloc_destroy(ah);
|
||||
return r;
|
||||
}
|
||||
|
@ -1160,6 +1160,7 @@ int add_mirrors_to_segments(struct cmd_context *cmd, struct logical_volume *lv,
|
||||
const struct segment_type *segtype;
|
||||
struct dm_list *parallel_areas;
|
||||
uint32_t adjusted_region_size;
|
||||
int r = 1;
|
||||
|
||||
if (!(parallel_areas = build_parallel_areas_from_lv(cmd, lv)))
|
||||
return_0;
|
||||
@ -1180,10 +1181,11 @@ int add_mirrors_to_segments(struct cmd_context *cmd, struct logical_volume *lv,
|
||||
|
||||
if (!lv_add_mirror_areas(ah, lv, 0, adjusted_region_size)) {
|
||||
log_error("Failed to add mirror areas to %s", lv->name);
|
||||
return 0;
|
||||
r = 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
alloc_destroy(ah);
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1349,6 +1351,7 @@ int add_mirror_log(struct cmd_context *cmd, struct logical_volume *lv,
|
||||
int in_sync;
|
||||
struct logical_volume *log_lv;
|
||||
struct lvinfo info;
|
||||
int r = 0;
|
||||
|
||||
/* Unimplemented features */
|
||||
if (log_count > 1) {
|
||||
@ -1404,13 +1407,15 @@ int add_mirror_log(struct cmd_context *cmd, struct logical_volume *lv,
|
||||
|
||||
if (!(log_lv = _set_up_mirror_log(cmd, ah, lv, log_count,
|
||||
region_size, alloc, in_sync)))
|
||||
return_0;
|
||||
goto_out;
|
||||
|
||||
if (!attach_mirror_log(first_seg(lv), log_lv))
|
||||
return_0;
|
||||
goto_out;
|
||||
|
||||
r = 1;
|
||||
out:
|
||||
alloc_destroy(ah);
|
||||
return 1;
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1455,8 +1460,10 @@ int add_mirror_images(struct cmd_context *cmd, struct logical_volume *lv,
|
||||
*/
|
||||
if (log_count &&
|
||||
!(log_lv = _set_up_mirror_log(cmd, ah, lv, log_count, region_size,
|
||||
alloc, mirror_in_sync())))
|
||||
return_0;
|
||||
alloc, mirror_in_sync()))) {
|
||||
stack;
|
||||
goto out_remove_imgs;
|
||||
}
|
||||
|
||||
/* The log initialization involves vg metadata commit.
|
||||
So from here on, if failure occurs, the log must be explicitly
|
||||
@ -1503,6 +1510,7 @@ int add_mirror_images(struct cmd_context *cmd, struct logical_volume *lv,
|
||||
"abandoned log LV before retrying.");
|
||||
|
||||
out_remove_imgs:
|
||||
alloc_destroy(ah);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user