diff options
author | Daniel Golle <daniel@makrotopia.org> | 2021-07-14 04:05:03 +0100 |
---|---|---|
committer | Daniel Golle <daniel@makrotopia.org> | 2021-07-14 05:30:36 +0100 |
commit | 2f42515977adef7c026eb380ed2423c533cf8f3d (patch) | |
tree | 8971d8357c4a3f95509072fdfa54c40715565366 | |
parent | 4d4dcfb33c5d9fa31c9916e106bee309ec7b4b01 (diff) | |
download | fstools-2f42515977adef7c026eb380ed2423c533cf8f3d.tar.gz |
block: resolve /dev/mapper/* name for /dev/dm-0 when hotplugging
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
-rw-r--r-- | block.c | 23 |
1 files changed, 22 insertions, 1 deletions
@@ -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) |