Re: What's the difference between async and sync unlink?

Oliver Neukum <[email protected]>
Newsgroups gmane.linux.usb.devel
Organization Novell
Message-ID <[email protected]>
Am Mittwoch, 11. Juli 2007 schrieb jidong xiao:
> On 7/11/07, Oliver Neukum <[email protected]> wrote:
> > Am Mittwoch, 11. Juli 2007 schrieb jidong xiao:
> > > I see there are two routines, usb_unlink_urb and usb_kill_urb,the
> > > latter one should be used for sync unlinking,this means it can go to
> > > sleep,it won't return until the completion handler have finished.And
> > > the former one could not go to sleep.But what's difference between
> > > sync and async,I mean,why do we need such two kinds of mechanism to
> > > cancel a transfer request?
> >
> > Under some conditions, eg. network drivers' and the storage driver's
> > timeout handling, drivers cannot sleep. They have to stop transfers
> > asynchronously.
> 
> Ok,let's talk about the timeout handling routine,we defined a
> timeout_handler in drivers/usb/storage/transport.c,inside that
> function,we will call usb_unlink_urb,why cannot we sleep?what impact
> if the driver go to sleep here?

The handler is called with a spinlock held. If you sleep and another
task tries to take the same lock, you will get a deadlock. This is the
general reason for being unable to sleep in USB drivers.

	Regards
		Oliver

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.