mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
dmsetup: ensure --filemap histogram bounds are freed
Make sure that the temporary dm_histogram used for the bounds argument is freed in the case that the user provided a --bounds argument on the command line.
This commit is contained in:
parent
5d455b28fc
commit
7ea5758c91
@ -4951,12 +4951,12 @@ static char *_get_abspath(const char *path)
|
|||||||
static int _stats_create_file(CMD_ARGS)
|
static int _stats_create_file(CMD_ARGS)
|
||||||
{
|
{
|
||||||
const char *alias, *program_id = DM_STATS_PROGRAM_ID;
|
const char *alias, *program_id = DM_STATS_PROGRAM_ID;
|
||||||
const char *histogram = _string_args[BOUNDS_ARG];
|
const char *bounds_str = _string_args[BOUNDS_ARG];
|
||||||
uint64_t *regions, *region, count = 0;
|
uint64_t *regions, *region, count = 0;
|
||||||
struct dm_histogram *bounds = NULL;
|
struct dm_histogram *bounds = NULL;
|
||||||
char *path, *abspath = NULL;
|
char *path, *abspath = NULL;
|
||||||
|
struct dm_stats *dms = NULL;
|
||||||
int group, fd, precise;
|
int group, fd, precise;
|
||||||
struct dm_stats *dms;
|
|
||||||
|
|
||||||
if (_switches[AREAS_ARG] || _switches[AREA_SIZE_ARG]) {
|
if (_switches[AREAS_ARG] || _switches[AREA_SIZE_ARG]) {
|
||||||
log_error("--filemap is incompatible with --areas and --area-size.");
|
log_error("--filemap is incompatible with --areas and --area-size.");
|
||||||
@ -5017,7 +5017,8 @@ static int _stats_create_file(CMD_ARGS)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (histogram && !(bounds = dm_histogram_bounds_from_string(histogram))) {
|
if (bounds_str
|
||||||
|
&& !(bounds = dm_histogram_bounds_from_string(bounds_str))) {
|
||||||
dm_free(abspath);
|
dm_free(abspath);
|
||||||
return_0;
|
return_0;
|
||||||
}
|
}
|
||||||
@ -5031,7 +5032,7 @@ static int _stats_create_file(CMD_ARGS)
|
|||||||
group = !_switches[NOGROUP_ARG];
|
group = !_switches[NOGROUP_ARG];
|
||||||
|
|
||||||
if (!(dms = dm_stats_create(DM_STATS_PROGRAM_ID)))
|
if (!(dms = dm_stats_create(DM_STATS_PROGRAM_ID)))
|
||||||
return_0;
|
goto_bad;
|
||||||
|
|
||||||
fd = open(abspath, O_RDONLY);
|
fd = open(abspath, O_RDONLY);
|
||||||
|
|
||||||
@ -5087,16 +5088,20 @@ static int _stats_create_file(CMD_ARGS)
|
|||||||
|
|
||||||
dm_free(regions);
|
dm_free(regions);
|
||||||
dm_free(abspath);
|
dm_free(abspath);
|
||||||
|
dm_free(bounds);
|
||||||
dm_stats_destroy(dms);
|
dm_stats_destroy(dms);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
bad:
|
bad:
|
||||||
dm_free(abspath);
|
dm_free(abspath);
|
||||||
|
dm_free(bounds);
|
||||||
|
|
||||||
if ((fd > -1) && close(fd))
|
if ((fd > -1) && close(fd))
|
||||||
log_error("Error closing %s", path);
|
log_error("Error closing %s", path);
|
||||||
|
|
||||||
dm_stats_destroy(dms);
|
if (dms)
|
||||||
|
dm_stats_destroy(dms);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user