/* When a control URB terminates with an error other than -EREMOTEIO, it is quite likely that the status stage of the transfer will not take place.  */
int usb_unlink_urb(struct urb *urb)
/* When a control URB terminates with an error other than -EREMOTEIO, it is quite likely that the status stage of the transfer will not take place.  */
int usb_unlink_urb(struct urb *urb)
{
	if (!urb)
		return -EINVAL;
	if (!urb->dev)
		return -ENODEV;
	if (!urb->ep)
		return -EIDRM;
	return usb_hcd_unlink_urb(urb, -ECONNRESET);
}