Index: drivers/usb/class/cdc-acm.c =================================================================== RCS file: /home/cvsroot/linuxppc/drivers/usb/class/cdc-acm.c,v retrieving revision 1.1.1.1 diff -u -u -r1.1.1.1 cdc-acm.c --- drivers/usb/class/cdc-acm.c 8 Jan 2004 11:25:51 -0000 1.1.1.1 +++ drivers/usb/class/cdc-acm.c 13 Jan 2004 20:40:39 -0000 @@ -157,6 +157,7 @@ unsigned int minor; /* acm minor number */ unsigned char throttle; /* throttled by tty layer */ unsigned char clocal; /* termios CLOCAL */ + unsigned int finish_remove; /* finish removing */ }; static struct usb_driver acm_driver; @@ -214,8 +215,16 @@ goto exit; } - if (!ACM_READY(acm)) + if (!ACM_READY(acm)) { + if (acm->finish_remove) { + dbg("unlinking urbs"); + usb_unlink_urb(acm->ctrlurb); + usb_unlink_urb(acm->writeurb); + usb_unlink_urb(acm->readurb); + return; + } goto exit; + } switch (dr->bRequest) { @@ -382,9 +391,7 @@ if (!--acm->used) { if (acm->dev) { acm_set_control(acm, acm->ctrlout = 0); - usb_unlink_urb(acm->ctrlurb); - usb_unlink_urb(acm->writeurb); - usb_unlink_urb(acm->readurb); + acm->finish_remove = 1; } else { tty_unregister_device(acm_tty_driver, acm->minor); acm_table[acm->minor] = NULL;