blockd: don't reparse blob msg in the vlist callbacks
authorRafał Miłecki <rafal@milecki.pl>
Fri, 7 Dec 2018 13:13:10 +0000 (14:13 +0100)
committerRafał Miłecki <rafal@milecki.pl>
Fri, 7 Dec 2018 20:46:37 +0000 (21:46 +0100)
ubus message is parsed in the block_hotplug() which fills all the struct
device fields. Once that is done there is no need to parse original
message again - it's enough to get required data from the struct.

This also fixes handling messages with "autofs" set to 0. They were
incorrectly interpreted due to the missing blobmsg_get_u32().

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: John Crispin <john@phrozen.org>
blockd.c

index 1379635c2ea62ff27e8a4fb0f2ce85437b22a7fa..29d16f27080310ddfd3982ea1a1a6c0f67a0dc6f 100644 (file)
--- a/blockd.c
+++ b/blockd.c
@@ -111,29 +111,19 @@ block(char *cmd, char *action, char *device)
 static void
 device_free(struct device *device)
 {
-       struct blob_attr *data[__MOUNT_MAX];
-
-       blobmsg_parse(mount_policy, __MOUNT_MAX, data,
-                     blob_data(device->msg), blob_len(device->msg));
-
-       if (data[MOUNT_AUTOFS] && device->target)
+       if (device->autofs && device->target)
                unlink(device->target);
 }
 
 static void
 device_add(struct device *device)
 {
-       struct blob_attr *data[__MOUNT_MAX];
        char path[64];
 
-       blobmsg_parse(mount_policy, __MOUNT_MAX, data,
-                     blob_data(device->msg), blob_len(device->msg));
-
-       if (!data[MOUNT_AUTOFS])
+       if (!device->autofs)
                return;
 
-       snprintf(path, sizeof(path), "/tmp/run/blockd/%s",
-                blobmsg_get_string(data[MOUNT_DEVICE]));
+       snprintf(path, sizeof(path), "/tmp/run/blockd/%s", device->name);
        if (symlink(path, device->target))
                ULOG_ERR("failed to symlink %s->%s\n", device->target, path);
 }