From: Rafał Miłecki <ra...@milecki.pl>

Device gets removed from the list (vlist_delete()) when block calls
"hotplug" method of blockd using ubus. Right after that block unmounts
that device on its own.

blockd shouldn't care about unmounting on its own for following reasons:
1) To avoid code/behavior duplication with block
2) To keep behavior consistent with mounting (blockd doesn't mount)
3) To allow implementing more features in block (e.g. hotplug.d events)

The design should be to:
1) Have block handle (un)mounting
2) Use blockd for providing devices/mounts state (using ubus)
3) Have blockd handle autofs and call block when needed

Signed-off-by: Rafał Miłecki <ra...@milecki.pl>
---
 blockd.c | 26 ++------------------------
 1 file changed, 2 insertions(+), 24 deletions(-)

diff --git a/blockd.c b/blockd.c
index a5da32c..1379635 100644
--- a/blockd.c
+++ b/blockd.c
@@ -112,34 +112,12 @@ static void
 device_free(struct device *device)
 {
        struct blob_attr *data[__MOUNT_MAX];
-       char *target = NULL;
-       char *path = NULL, _path[64], *mp;
 
        blobmsg_parse(mount_policy, __MOUNT_MAX, data,
                      blob_data(device->msg), blob_len(device->msg));
 
-       if (data[MOUNT_AUTOFS]) {
-               target = device->target;
-               snprintf(_path, sizeof(_path), "/tmp/run/blockd/%s",
-                        blobmsg_get_string(data[MOUNT_DEVICE]));
-               path = _path;
-       } else {
-               path = target = device->target;
-       }
-
-       mp = _find_mount_point(device->name);
-       if (path && mp)
-               if (umount2(path, MNT_DETACH))
-                       ULOG_ERR("failed to unmount %s\n", path);
-       free(mp);
-
-       if (!target)
-               return;
-
-       if (data[MOUNT_AUTOFS])
-               unlink(target);
-       else
-               rmdir(target);
+       if (data[MOUNT_AUTOFS] && device->target)
+               unlink(device->target);
 }
 
 static void
-- 
2.13.7


_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to