On Fri, Mar 18, 2022 at 5:33 PM <mwilck@xxxxxxxx> wrote: > > From: Martin Wilck <mwilck@xxxxxxxx> > > If multipathd needs to delay reconfigure() because it's waiting for a map > creation uevent, it can happen that child() isn't woken up if the map > being waited for is removed before the uevent arrives. Fix this by > unblocking reconfigure() with the remove_map_callback() function. > > Signed-off-by: Martin Wilck <mwilck@xxxxxxxx> > --- > multipathd/main.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/multipathd/main.c b/multipathd/main.c > index f3b8eb4..4721cd8 100644 > --- a/multipathd/main.c > +++ b/multipathd/main.c > @@ -319,6 +319,17 @@ static bool unblock_reconfigure(void) > return was_delayed; > } > > +/* > + * Make sure child() is woken up when a map is removed that multipathd > + * is currently waiting for. > + * Overrides libmultipath's weak symbol by the same name > + */ > +void remove_map_callback(struct multipath *mpp) > +{ > + if (mpp->wait_for_udev > 0) Is there a reason why you don't decrement wait_for_udev, and check need_to_delay_reconfig() like in ev_add_map()? I realize that it doesn't hurt anything to unblock the reconfigure even if there are other devices that need a delay. The main thread will notice that it still needs to delay. I'm just wondering why we do it differently here? -Ben > + unblock_reconfigure(); > +} > + > void schedule_reconfigure(enum force_reload_types requested_type) > { > pthread_mutex_lock(&config_lock); > -- > 2.35.1 > -- dm-devel mailing list dm-devel@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/dm-devel