From: Igor Kotrasinski Date: Mon, 21 Sep 2015 09:30:44 +0000 (+0200) Subject: usbip: vhci_hcd: only return urb at enqueue when served X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=03b0a52822fec8fba351fd472f3adda6fd760e77;p=deliverable%2Flinux.git usbip: vhci_hcd: only return urb at enqueue when served We handle USB_REQ_SET_ADDRESS at enqueue, so we want to perform cleanup and giveback the urb. We should not call usb_hcd_giveback_urb when we're cleaning up after a failed enqueue, though. Only giveback the urb at cleanup when we claim to have served it. Signed-off-by: Igor Kotrasinski Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c index 42c82317f15e..51145cf92860 100644 --- a/drivers/usb/usbip/vhci_hcd.c +++ b/drivers/usb/usbip/vhci_hcd.c @@ -565,7 +565,9 @@ no_need_xmit: usb_hcd_unlink_urb_from_ep(hcd, urb); no_need_unlink: spin_unlock(&the_controller->lock); - usb_hcd_giveback_urb(vhci_to_hcd(the_controller), urb, urb->status); + if (!ret) + usb_hcd_giveback_urb(vhci_to_hcd(the_controller), + urb, urb->status); return ret; }