]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - drivers/usb/host/whci/asl.c
USB: whci-hcd: check return value of usb_hcd_link_urb_to_ep()
[mirror_ubuntu-artful-kernel.git] / drivers / usb / host / whci / asl.c
index be753f664993d29479edcc3ba2a0c1d9f601f635..c2050785a819f76b0157bc0490b66d31977999c8 100644 (file)
@@ -255,23 +255,29 @@ int asl_urb_enqueue(struct whc *whc, struct urb *urb, gfp_t mem_flags)
 
        spin_lock_irqsave(&whc->lock, flags);
 
+       err = usb_hcd_link_urb_to_ep(&whc->wusbhc.usb_hcd, urb);
+       if (err < 0) {
+               spin_unlock_irqrestore(&whc->lock, flags);
+               return err;
+       }
+
        qset = get_qset(whc, urb, GFP_ATOMIC);
        if (qset == NULL)
                err = -ENOMEM;
        else
                err = qset_add_urb(whc, qset, urb, GFP_ATOMIC);
        if (!err) {
-               usb_hcd_link_urb_to_ep(&whc->wusbhc.usb_hcd, urb);
                if (!qset->in_sw_list)
                        asl_qset_insert_begin(whc, qset);
-       }
+       } else
+               usb_hcd_unlink_urb_from_ep(&whc->wusbhc.usb_hcd, urb);
 
        spin_unlock_irqrestore(&whc->lock, flags);
 
        if (!err)
                queue_work(whc->workqueue, &whc->async_work);
 
-       return 0;
+       return err;
 }
 
 /**