]> sourceware.org Git - lvm2.git/commitdiff
libdm: fix initialization of head for reused structure
authorZdenek Kabelac <zkabelac@redhat.com>
Mon, 26 Jun 2017 16:22:40 +0000 (18:22 +0200)
committerZdenek Kabelac <zkabelac@redhat.com>
Mon, 26 Jun 2017 17:45:11 +0000 (19:45 +0200)
Dmeventd reuses  'dm_task' struct for some STATUS operation, but due to
missing reinitization of dm_task target list, it has caused misprocesing
of recieved events as the parsed target has been simply added to the
list of existing status and cause multiple actions being called for
single event.

WHATS_NEW_DM
libdm/ioctl/libdm-iface.c

index 89f4a00ba9a2165ed897356ccdb4324a415843ed..2e31b9ad18e314a8266e477c16755cb6d67e4e4b 100644 (file)
@@ -1,5 +1,6 @@
 Version 1.02.141 - 
 ===============================
+  Fix reusing of dm_task structure for status reading (used by dmeventd).
   Add dm_percent_to_round_float for adjusted percentage rounding.
   Reset array with dead rimage devices once raid gets in sync.
   Drop unneeded --config option from raid dmeventd plugin.
index cb3e8dcda4473b8c4decaede981201de2ea14924..65e75f66720cf1fb1690bff352fdd0ec9ecfeb2b 100644 (file)
@@ -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,
This page took 0.034952 seconds and 5 git commands to generate.