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) + 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