if (err != -EPERM && err != -ENODEV)
                        bt_dev_err(hdev, "urb %p failed to resubmit (%d)",
                                   urb, -err);
+               if (err != -EPERM)
+                       hci_cmd_sync_cancel(hdev, -err);
                usb_unanchor_urb(urb);
        }
 }
                if (err != -EPERM && err != -ENODEV)
                        bt_dev_err(hdev, "urb %p submission failed (%d)",
                                   urb, -err);
+               if (err != -EPERM)
+                       hci_cmd_sync_cancel(hdev, -err);
                usb_unanchor_urb(urb);
        }
 
        if (!test_bit(HCI_RUNNING, &hdev->flags))
                goto done;
 
-       if (!urb->status)
+       if (!urb->status) {
                hdev->stat.byte_tx += urb->transfer_buffer_length;
-       else
+       } else {
+               if (hci_skb_pkt_type(skb) == HCI_COMMAND_PKT)
+                       hci_cmd_sync_cancel(hdev, -urb->status);
                hdev->stat.err_tx++;
+       }
 
 done:
        spin_lock_irqsave(&data->txlock, flags);