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,