USB_POISON_URB(9) USB Core APIs USB_POISON_URB(9)NAMEusb_poison_urb - reliably kill a transfer and prevent further use of an
URB
SYNOPSIS
void usb_poison_urb(struct urb * urb);
ARGUMENTS
urb
pointer to URB describing a previously submitted request, may be
NULL
DESCRIPTION
This routine cancels an in-progress request. It is guaranteed that upon
return all completion handlers will have finished and the URB will be
totally idle and cannot be reused. These features make this an ideal
way to stop I/O in a disconnect callback. If the request has not
already finished or been unlinked the completion handler will see
urb->status == -ENOENT.
After and while the routine runs, attempts to resubmit the URB will
fail with error -EPERM. Thus even if the URB´s completion handler
always tries to resubmit, it will not succeed and the URB will become
idle.
This routine may not be used in an interrupt context (such as a bottom
half or a completion handler), or when holding a spinlock, or in other
situations where the caller can´t schedule.
This routine should not be called by a driver after its disconnect
method has returned.
COPYRIGHTKernel Hackers Manual 2.6. November 2013 USB_POISON_URB(9)