WHATS_NEW_DM | 1 + libdm/ioctl/libdm-iface.c | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM index 581cd42..bf08130 100644 --- a/WHATS_NEW_DM +++ b/WHATS_NEW_DM @@ -1,5 +1,6 @@ Version 1.02.141 - =============================== + Fix reusing of dm_task structure for status reading (used by dmeventd). dm_get_status_raid() handle better some incosistent md statuses. Accept truncated files in calls to dm_stats_update_regions_from_fd(). Restore Warning by 5% increment when thin-pool is over 80% (1.02.138). diff --git a/libdm/ioctl/libdm-iface.c b/libdm/ioctl/libdm-iface.c index cb3e8dc..65e75f6 100644 --- a/libdm/ioctl/libdm-iface.c +++ b/libdm/ioctl/libdm-iface.c @@ -467,7 +467,7 @@ static void _dm_zfree_dmi(struct dm_ioctl *dmi) } } -void dm_task_destroy(struct dm_task *dmt) +static void _dm_task_free_targets(struct dm_task *dmt) { struct target *t, *n; @@ -478,6 +478,12 @@ void dm_task_destroy(struct dm_task *dmt) dm_free(t); } + dmt->head = dmt->tail = NULL; +} + +void dm_task_destroy(struct dm_task *dmt) +{ + _dm_task_free_targets(dmt); _dm_zfree_dmi(dmt->dmi.v4); dm_free(dmt->dev_name); dm_free(dmt->mangled_dev_name); @@ -652,6 +658,8 @@ static int _unmarshal_status(struct dm_task *dmt, struct dm_ioctl *dmi) uint32_t i; struct dm_target_spec *spec; + _dm_task_free_targets(dmt); + for (i = 0; i < dmi->target_count; i++) { spec = (struct dm_target_spec *) outptr; if (!dm_task_add_target(dmt, spec->sector_start, -- 1.8.3.1