|
@@ -54,28 +54,29 @@ static void w1_send_slave(struct w1_master *dev, u64 rn)
|
|
|
struct w1_netlink_msg *hdr = (struct w1_netlink_msg *)(msg + 1);
|
|
|
struct w1_netlink_cmd *cmd = (struct w1_netlink_cmd *)(hdr + 1);
|
|
|
int avail;
|
|
|
+ u64 *data;
|
|
|
|
|
|
/* update kernel slave list */
|
|
|
w1_slave_found(dev, rn);
|
|
|
|
|
|
avail = dev->priv_size - cmd->len;
|
|
|
|
|
|
- if (avail > 8) {
|
|
|
- u64 *data = (void *)(cmd + 1) + cmd->len;
|
|
|
+ if (avail < 8) {
|
|
|
+ msg->ack++;
|
|
|
+ cn_netlink_send(msg, 0, GFP_KERNEL);
|
|
|
|
|
|
- *data = rn;
|
|
|
- cmd->len += 8;
|
|
|
- hdr->len += 8;
|
|
|
- msg->len += 8;
|
|
|
- return;
|
|
|
+ msg->len = sizeof(struct w1_netlink_msg) +
|
|
|
+ sizeof(struct w1_netlink_cmd);
|
|
|
+ hdr->len = sizeof(struct w1_netlink_cmd);
|
|
|
+ cmd->len = 0;
|
|
|
}
|
|
|
|
|
|
- msg->ack++;
|
|
|
- cn_netlink_send(msg, 0, GFP_KERNEL);
|
|
|
+ data = (void *)(cmd + 1) + cmd->len;
|
|
|
|
|
|
- msg->len = sizeof(struct w1_netlink_msg) + sizeof(struct w1_netlink_cmd);
|
|
|
- hdr->len = sizeof(struct w1_netlink_cmd);
|
|
|
- cmd->len = 0;
|
|
|
+ *data = rn;
|
|
|
+ cmd->len += 8;
|
|
|
+ hdr->len += 8;
|
|
|
+ msg->len += 8;
|
|
|
}
|
|
|
|
|
|
static int w1_process_search_command(struct w1_master *dev, struct cn_msg *msg,
|