From 2f42515977adef7c026eb380ed2423c533cf8f3d Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Wed, 14 Jul 2021 04:05:03 +0100 Subject: block: resolve /dev/mapper/* name for /dev/dm-0 when hotplugging Signed-off-by: Daniel Golle --- block.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/block.c b/block.c index 5b0517e..4416c91 100644 --- a/block.c +++ b/block.c @@ -1171,7 +1171,28 @@ static int mount_action(char *action, char *device, int type) static int main_hotplug(int argc, char **argv) { - return mount_action(getenv("ACTION"), getenv("DEVNAME"), TYPE_HOTPLUG); + char *devname = getenv("DEVNAME"); + + /* resolve device mapper name for dm-* if possible */ + if (devname && strlen(devname) >= 2 && !strncmp(devname, "dm-", 3)) { + char *dmdevnamep; + char dmname[256]; + + if (asprintf(&dmdevnamep, "/sys/%s/dm/name", getenv("DEVPATH")) == -1) + exit(ENOMEM); + + FILE *fp = fopen(dmdevnamep, "r"); + free(dmdevnamep); + + if (fp) { + if (fgets(dmname, sizeof(dmname), fp)) + devname = dmname; + + fclose(fp); + } + } + + return mount_action(getenv("ACTION"), devname, TYPE_HOTPLUG); } static int main_autofs(int argc, char **argv) -- cgit v1.2.1