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