{
int minor = iminor(inode);
DECLARE_WAITQUEUE(wait, current);
+ struct list_head *devs, *mdevs;
struct usb_midi_state *s;
struct usb_mididev *m;
unsigned long flags;
for(;;) {
down(&open_sem);
- list_for_each_entry(s, &mididevs, mididev) {
- list_for_each_entry(m, &s->midiDevList, list) {
+ list_for_each(devs, &mididevs) {
+ s = list_entry(devs, struct usb_midi_state, mididev);
+ list_for_each(mdevs, &s->midiDevList) {
+ m = list_entry(mdevs, struct usb_mididev, list);
if ( !((m->dev_midi ^ minor) & ~0xf) )
goto device_found;
}
if ( m->open_mode & FMODE_WRITE ) {
m->open_mode &= ~FMODE_WRITE;
- usb_kill_urb( m->mout.ep->urb );
+ usb_unlink_urb( m->mout.ep->urb );
}
if ( m->open_mode & FMODE_READ ) {
if ( m->min.ep->readers == 0 &&
m->min.ep->urbSubmitted ) {
m->min.ep->urbSubmitted = 0;
- usb_kill_urb(m->min.ep->urb);
+ usb_unlink_urb(m->min.ep->urb);
}
spin_unlock_irqrestore( &m->min.ep->lock, flagsep );
}
static int remove_midi_in_endpoint( struct midi_in_endpoint *min )
{
- usb_kill_urb( min->urb );
+ usb_unlink_urb( min->urb );
usb_free_urb( min->urb );
kfree( min->recvBuf );
kfree( min );
static int remove_midi_out_endpoint( struct midi_out_endpoint *mout )
{
- usb_kill_urb( mout->urb );
+ usb_unlink_urb( mout->urb );
usb_free_urb( mout->urb );
kfree( mout->buf );
kfree( mout );
static void usb_midi_disconnect(struct usb_interface *intf)
{
struct usb_midi_state *s = usb_get_intfdata (intf);
+ struct list_head *list;
struct usb_mididev *m;
if ( !s )
s->usbdev = NULL;
usb_set_intfdata (intf, NULL);
- list_for_each_entry(m, &s->midiDevList, list) {
+ list_for_each(list, &s->midiDevList) {
+ m = list_entry(list, struct usb_mididev, list);
wake_up(&(m->min.ep->wait));
wake_up(&(m->mout.ep->wait));
if ( m->dev_midi >= 0 ) {