'\" t .\" Title: usb_poison_urb .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: January 2017 .\" Manual: USB Core APIs .\" Source: Kernel Hackers Manual 4.8.15 .\" Language: English .\" .TH "USB_POISON_URB" "9" "January 2017" "Kernel Hackers Manual 4\&.8\&." "USB Core APIs" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" usb_poison_urb \- reliably kill a transfer and prevent further use of an URB .SH "SYNOPSIS" .HP \w'void\ usb_poison_urb('u .BI "void usb_poison_urb(struct\ urb\ *\ " "urb" ");" .SH "ARGUMENTS" .PP \fIurb\fR .RS 4 pointer to URB describing a previously submitted request, may be NULL .RE .SH "DESCRIPTION" .PP 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 \fBdisconnect\fR callback\&. If the request has not already finished or been unlinked the completion handler will see urb\->status == \-ENOENT\&. .PP After and while the routine runs, attempts to resubmit the URB will fail with error \-EPERM\&. Thus even if the URB\*(Aqs completion handler always tries to resubmit, it will not succeed and the URB will become idle\&. .PP The URB must not be deallocated while this routine is running\&. In particular, when a driver calls this routine, it must insure that the completion handler cannot deallocate the URB\&. .PP 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\*(Aqt \fBschedule\fR\&. .PP This routine should not be called by a driver after its disconnect method has returned\&. .SH "COPYRIGHT" .br