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

Paul Oranje por at oranjevos.nl
Wed Dec 5 07:31:20 EST 2018


> Op 4 dec. 2018, om 12:32 heeft Rafał Miłecki <zajec5 at gmail.com> het volgende geschreven:
> 
> 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
Can this cause a transition into a state where a device is (still) mounted but removed from the list, and if so, is that a valid, an admissible state ? Shouldn't block be required to first unmount before calling blockd's hotplug entry ?

> 
> 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

-- 
Paul Oranje
M	+31 6 2127 8389
T	+31 20 494 1306
Achterlaan 20, 1027 AK Zunderdorp




_______________________________________________
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