block: match device path instead of assuming /dev/%s
authorDaniel Golle <daniel@makrotopia.org>
Wed, 12 May 2021 17:05:37 +0000 (18:05 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Sat, 15 May 2021 23:28:11 +0000 (00:28 +0100)
Block devices created by device mapper are in /dev/mapper/ folder,
hence the assumption of the 'block' tool expecting /dev/%s being the
path of a device doesn't hold true.
Match device path from cache instead.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
block.c

diff --git a/block.c b/block.c
index a613fd7648c3112578528f2d7fb5833d08e1e7c1..de6229d5644b32e04f0ad9630d8e185d99d91f2d 100644 (file)
--- a/block.c
+++ b/block.c
@@ -1135,11 +1135,23 @@ static int umount_device(char *path, int type, bool all)
 
 static int mount_action(char *action, char *device, int type)
 {
-       char path[32];
+       char *path = NULL;
+       struct probe_info *pr;
 
        if (!action || !device)
                return -1;
-       snprintf(path, sizeof(path), "/dev/%s", device);
+
+       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)
@@ -1154,10 +1166,6 @@ static int mount_action(char *action, char *device, int type)
                return -1;
        }
 
-       if (config_load(NULL))
-               return -1;
-       cache_load(0);
-
        return mount_device(find_block_info(NULL, NULL, path), type);
 }