[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