u8 cmd_no, int channel)
 {
        struct kvaser_cmd *cmd;
+       size_t cmd_len;
        int err;
 
        cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
                return -ENOMEM;
 
        cmd->header.cmd_no = cmd_no;
+       cmd_len = kvaser_usb_hydra_cmd_size(cmd);
        if (channel < 0) {
                kvaser_usb_hydra_set_cmd_dest_he
                                (cmd, KVASER_USB_HYDRA_HE_ADDRESS_ILLEGAL);
        kvaser_usb_hydra_set_cmd_transid
                                (cmd, kvaser_usb_hydra_get_next_transid(dev));
 
-       err = kvaser_usb_send_cmd(dev, cmd, kvaser_usb_hydra_cmd_size(cmd));
+       err = kvaser_usb_send_cmd(dev, cmd, cmd_len);
        if (err)
                goto end;
 
 {
        struct kvaser_cmd *cmd;
        struct kvaser_usb *dev = priv->dev;
+       size_t cmd_len;
        int err;
 
        cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC);
                return -ENOMEM;
 
        cmd->header.cmd_no = cmd_no;
+       cmd_len = kvaser_usb_hydra_cmd_size(cmd);
 
        kvaser_usb_hydra_set_cmd_dest_he
                (cmd, dev->card_data.hydra.channel_to_he[priv->channel]);
        kvaser_usb_hydra_set_cmd_transid
                                (cmd, kvaser_usb_hydra_get_next_transid(dev));
 
-       err = kvaser_usb_send_cmd_async(priv, cmd,
-                                       kvaser_usb_hydra_cmd_size(cmd));
+       err = kvaser_usb_send_cmd_async(priv, cmd, cmd_len);
        if (err)
                kfree(cmd);
 
 {
        struct kvaser_usb_dev_card_data *card_data = &dev->card_data;
        struct kvaser_cmd *cmd;
+       size_t cmd_len;
        u32 value = 0;
        u32 mask = 0;
        u16 cap_cmd_res;
                return -ENOMEM;
 
        cmd->header.cmd_no = CMD_GET_CAPABILITIES_REQ;
+       cmd_len = kvaser_usb_hydra_cmd_size(cmd);
        cmd->cap_req.cap_cmd = cpu_to_le16(cap_cmd_req);
 
        kvaser_usb_hydra_set_cmd_dest_he(cmd, card_data->hydra.sysdbg_he);
        kvaser_usb_hydra_set_cmd_transid
                                (cmd, kvaser_usb_hydra_get_next_transid(dev));
 
-       err = kvaser_usb_send_cmd(dev, cmd, kvaser_usb_hydra_cmd_size(cmd));
+       err = kvaser_usb_send_cmd(dev, cmd, cmd_len);
        if (err)
                goto end;
 
        struct kvaser_usb *dev = priv->dev;
        struct kvaser_usb_net_hydra_priv *hydra = priv->sub_priv;
        struct kvaser_cmd *cmd;
+       size_t cmd_len;
        int err;
 
        if (!hydra)
                return -ENOMEM;
 
        cmd->header.cmd_no = CMD_GET_BUSPARAMS_REQ;
+       cmd_len = kvaser_usb_hydra_cmd_size(cmd);
        kvaser_usb_hydra_set_cmd_dest_he
                (cmd, dev->card_data.hydra.channel_to_he[priv->channel]);
        kvaser_usb_hydra_set_cmd_transid
 
        reinit_completion(&priv->get_busparams_comp);
 
-       err = kvaser_usb_send_cmd(dev, cmd, kvaser_usb_hydra_cmd_size(cmd));
+       err = kvaser_usb_send_cmd(dev, cmd, cmd_len);
        if (err)
                return err;
 
        struct kvaser_cmd *cmd;
        struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
        struct kvaser_usb *dev = priv->dev;
+       size_t cmd_len;
        int err;
 
        cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
                return -ENOMEM;
 
        cmd->header.cmd_no = CMD_SET_BUSPARAMS_REQ;
+       cmd_len = kvaser_usb_hydra_cmd_size(cmd);
        memcpy(&cmd->set_busparams_req.busparams_nominal, busparams,
               sizeof(cmd->set_busparams_req.busparams_nominal));
 
        kvaser_usb_hydra_set_cmd_transid
                                (cmd, kvaser_usb_hydra_get_next_transid(dev));
 
-       err = kvaser_usb_send_cmd(dev, cmd, kvaser_usb_hydra_cmd_size(cmd));
+       err = kvaser_usb_send_cmd(dev, cmd, cmd_len);
 
        kfree(cmd);
 
        struct kvaser_cmd *cmd;
        struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
        struct kvaser_usb *dev = priv->dev;
+       size_t cmd_len;
        int err;
 
        cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
                return -ENOMEM;
 
        cmd->header.cmd_no = CMD_SET_BUSPARAMS_FD_REQ;
+       cmd_len = kvaser_usb_hydra_cmd_size(cmd);
        memcpy(&cmd->set_busparams_req.busparams_data, busparams,
               sizeof(cmd->set_busparams_req.busparams_data));
 
        kvaser_usb_hydra_set_cmd_transid
                                (cmd, kvaser_usb_hydra_get_next_transid(dev));
 
-       err = kvaser_usb_send_cmd(dev, cmd, kvaser_usb_hydra_cmd_size(cmd));
+       err = kvaser_usb_send_cmd(dev, cmd, cmd_len);
 
        kfree(cmd);
 
 static int kvaser_usb_hydra_get_software_details(struct kvaser_usb *dev)
 {
        struct kvaser_cmd *cmd;
+       size_t cmd_len;
        int err;
        u32 flags;
        struct kvaser_usb_dev_card_data *card_data = &dev->card_data;
                return -ENOMEM;
 
        cmd->header.cmd_no = CMD_GET_SOFTWARE_DETAILS_REQ;
+       cmd_len = kvaser_usb_hydra_cmd_size(cmd);
        cmd->sw_detail_req.use_ext_cmd = 1;
        kvaser_usb_hydra_set_cmd_dest_he
                                (cmd, KVASER_USB_HYDRA_HE_ADDRESS_ILLEGAL);
        kvaser_usb_hydra_set_cmd_transid
                                (cmd, kvaser_usb_hydra_get_next_transid(dev));
 
-       err = kvaser_usb_send_cmd(dev, cmd, kvaser_usb_hydra_cmd_size(cmd));
+       err = kvaser_usb_send_cmd(dev, cmd, cmd_len);
        if (err)
                goto end;
 
 {
        struct kvaser_usb *dev = priv->dev;
        struct kvaser_cmd *cmd;
+       size_t cmd_len;
        int err;
 
        if ((priv->can.ctrlmode &
                return -ENOMEM;
 
        cmd->header.cmd_no = CMD_SET_DRIVERMODE_REQ;
+       cmd_len = kvaser_usb_hydra_cmd_size(cmd);
        kvaser_usb_hydra_set_cmd_dest_he
                (cmd, dev->card_data.hydra.channel_to_he[priv->channel]);
        kvaser_usb_hydra_set_cmd_transid
        else
                cmd->set_ctrlmode.mode = KVASER_USB_HYDRA_CTRLMODE_NORMAL;
 
-       err = kvaser_usb_send_cmd(dev, cmd, kvaser_usb_hydra_cmd_size(cmd));
+       err = kvaser_usb_send_cmd(dev, cmd, cmd_len);
        kfree(cmd);
 
        return err;