> Op 4 dec. 2018, om 12:32 heeft Rafał Miłecki <zaj...@gmail.com> het volgende 
> geschreven:
> 
> 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
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 <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

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




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

Reply via email to