On Thu, Mar 31, 2022 at 12:15:08AM +0200, mwi...@suse.com wrote:
> With the new list-appending logic, it can happen that previously
> merged events can now be filtered. Do it.
> 
> Signed-off-by: Martin Wilck <mwi...@suse.com>
> ---
>  libmultipath/uevent.c | 16 +++++++++++++++-
>  1 file changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/libmultipath/uevent.c b/libmultipath/uevent.c
> index eb900ec..809c74c 100644
> --- a/libmultipath/uevent.c
> +++ b/libmultipath/uevent.c
> @@ -305,7 +305,7 @@ static void uevent_delete_from_list(struct uevent 
> *to_delete,
>        * for the anchor), "old_tail" must be moved. It can happen that
>        * "old_tail" ends up pointing at the anchor.
>        */
> -     if (*old_tail == &to_delete->node)
> +     if (old_tail && *old_tail == &to_delete->node)
>               *old_tail = to_delete->node.prev;
>  
>       list_del_init(&to_delete->node);
> @@ -360,6 +360,20 @@ uevent_filter(struct uevent *later, struct 
> uevent_filter_state *st)
>                * filter unnessary earlier uevents
>                * by the later uevent
>                */
> +             if (!list_empty(&earlier->merge_node)) {
> +                     struct uevent *mn, *t;
> +
> +                     list_for_each_entry_reverse_safe(mn, t, 
> &earlier->merge_node, node) {
> +                             if (uevent_can_filter(mn, later)) {
> +                                     condlog(4, "uevent: \"%s %s\" (merged 
> into \"%s %s\") filtered by \"%s %s\"",
> +                                             mn->action, mn->kernel,
> +                                             earlier->action, 
> earlier->kernel,
> +                                             later->action, later->kernel);
> +                                     uevent_delete_from_list(mn, &t, NULL);

Just like with 05/14, you could just use a much simpler delete function
here, since moving old_tail and merged nodes is unnecessary. I guess I
don't care that much, if you'd rather just have one function, so

Reviewed-by: Benjamin Marzinski <bmarz...@redhat.com>

> +                                     st->filtered++;
> +                             }
> +                     }
> +             }
>               if (uevent_can_filter(earlier, later)) {
>                       condlog(3, "uevent: %s-%s has filtered by uevent: 
> %s-%s",
>                               earlier->kernel, earlier->action,
> -- 
> 2.35.1
--
dm-devel mailing list
dm-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel

Reply via email to