From 5114595bc37e441a905db6b05b4487ad67fcb3d1 Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Fri, 23 Jul 2021 23:20:43 +0100 Subject: block: allow remove hotplug event to arrive at blockd As the hotplug event fires after the device has been removed, it will never be found by _cache_load(). Hence the 'remove' event needs to propagate in all cases and we only need to populate the cache in case of 'add' events. Signed-off-by: Daniel Golle --- block.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/block.c b/block.c index b0ac524..ae5adf0 100644 --- a/block.c +++ b/block.c @@ -1141,23 +1141,11 @@ static int mount_action(char *action, char *device, int type) if (!action || !device) return -1; - if (config_load(NULL)) - return -1; - - cache_load(1); - - list_for_each_entry(pr, &devices, list) - if (!strcmp(basename(pr->dev), device)) - path = pr->dev; - - if (!path) - return -1; - if (!strcmp(action, "remove")) { if (type == TYPE_HOTPLUG) blockd_notify("hotplug", device, NULL, NULL); - umount_device(path, type, true); + umount_device(device, type, true); return 0; } else if (strcmp(action, "add")) { @@ -1166,6 +1154,18 @@ static int mount_action(char *action, char *device, int type) return -1; } + if (config_load(NULL)) + return -1; + + cache_load(1); + + list_for_each_entry(pr, &devices, list) + if (!strcmp(basename(pr->dev), device)) + path = pr->dev; + + if (!path) + return -1; + return mount_device(find_block_info(NULL, NULL, path), type); } -- cgit v1.2.1