|
|
@@ -866,19 +866,20 @@ static void iowarrior_disconnect(struct usb_interface *interface)
|
|
|
dev = usb_get_intfdata(interface);
|
|
|
mutex_lock(&iowarrior_open_disc_lock);
|
|
|
usb_set_intfdata(interface, NULL);
|
|
|
+ /* prevent device read, write and ioctl */
|
|
|
+ dev->present = 0;
|
|
|
|
|
|
minor = dev->minor;
|
|
|
+ mutex_unlock(&iowarrior_open_disc_lock);
|
|
|
+ /* give back our minor - this will call close() locks need to be dropped at this point*/
|
|
|
|
|
|
- /* give back our minor */
|
|
|
usb_deregister_dev(interface, &iowarrior_class);
|
|
|
|
|
|
mutex_lock(&dev->mutex);
|
|
|
|
|
|
/* prevent device read, write and ioctl */
|
|
|
- dev->present = 0;
|
|
|
|
|
|
mutex_unlock(&dev->mutex);
|
|
|
- mutex_unlock(&iowarrior_open_disc_lock);
|
|
|
|
|
|
if (dev->opened) {
|
|
|
/* There is a process that holds a filedescriptor to the device ,
|