return -EBUSY;
        WARN_ON_ONCE(cmdinfo->state & COMMAND_COMPLETED);
        cmdinfo->state |= COMMAND_COMPLETED;
-       usb_free_urb(cmdinfo->data_in_urb);
-       usb_free_urb(cmdinfo->data_out_urb);
        if (cmdinfo->state & COMMAND_ABORTED)
                scmd_printk(KERN_INFO, cmnd, "abort completed\n");
        list_del(&cmdinfo->list);
        if (cmdinfo->data_in_urb == urb) {
                sdb = scsi_in(cmnd);
                cmdinfo->state &= ~DATA_IN_URB_INFLIGHT;
+               cmdinfo->data_in_urb = NULL;
        } else if (cmdinfo->data_out_urb == urb) {
                sdb = scsi_out(cmnd);
                cmdinfo->state &= ~DATA_OUT_URB_INFLIGHT;
+               cmdinfo->data_out_urb = NULL;
        }
        if (sdb == NULL) {
                WARN_ON_ONCE(1);
        }
        uas_try_complete(cmnd, __func__);
 out:
+       usb_free_urb(urb);
        spin_unlock_irqrestore(&devinfo->lock, flags);
 }