/* This routine should not be called by a driver after its disconnect method has returned.  */
void usb_poison_urb(struct urb *urb)
/* This routine should not be called by a driver after its disconnect method has returned.  */
void usb_poison_urb(struct urb *urb)
{
	might_sleep();
	if (!(urb && urb->dev && urb->ep))
		return;
	atomic_inc(&urb->reject);
	usb_hcd_unlink_urb(urb, -ENOENT);
	wait_event(usb_kill_urb_queue, atomic_read(&urb->use_count) == 0);
}