summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Golle <daniel@makrotopia.org>2021-07-14 04:05:03 +0100
committerDaniel Golle <daniel@makrotopia.org>2021-07-14 05:30:36 +0100
commit2f42515977adef7c026eb380ed2423c533cf8f3d (patch)
tree8971d8357c4a3f95509072fdfa54c40715565366
parent4d4dcfb33c5d9fa31c9916e106bee309ec7b4b01 (diff)
downloadfstools-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.c23
1 files changed, 22 insertions, 1 deletions
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)