[OpenWrt-Devel] [PATCH fstools] blockd: don't unmount device when removing it from the list

Rafał Miłecki zajec5 at gmail.com
Tue Dec 4 06:32:21 EST 2018


From: Rafał Miłecki <rafal at 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 <rafal at 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 at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list