X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=block.c;fp=block.c;h=4416c91a2517bcdf756a854229ea2ccb6eb253c6;hb=2f42515977adef7c026eb380ed2423c533cf8f3d;hp=5b0517eb95c8a22b928aedd06eb85b4fa8191c0e;hpb=4d4dcfb33c5d9fa31c9916e106bee309ec7b4b01;p=project%2Ffstools.git 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)