diff -ur 1817/linux/linux/drivers/usb/printer.c 1819/linux/linux/drivers/usb/printer.c --- 1817/linux/linux/drivers/usb/printer.c 2004-05-04 05:43:31.000000000 +0400 +++ 1819/linux/linux/drivers/usb/printer.c 2004-08-26 10:27:20.000000000 +0400 @@ -527,6 +527,7 @@ int minor = MINOR(inode->i_rdev) - USBLP_MINOR_BASE; struct usblp *usblp; int retval; + unsigned int arg = NULL, ioctl_retval; //Added by PaN if (minor < 0 || minor >= USBLP_MINORS) return -ENODEV; @@ -572,6 +573,12 @@ file->private_data = NULL; } } + + /* Added by PaN */ + if ((ioctl_retval=usblp_ioctl(inode, file, LPGETID, arg)) <0) + { + // Update device id failed + } out: unlock_kernel(); return retval; @@ -581,7 +588,12 @@ { devfs_unregister (usblp->devfs); usblp_table [usblp->minor] = NULL; - info("usblp%d: removed", usblp->minor); + //info("usblp%d: removed", usblp->minor); + + /* Added by PaN */ + remove_proc_entry("usblpid", usblp_dir); + remove_proc_entry(MODULE_NAME, NULL); + /* End PaN */ kfree (usblp->writebuf); kfree (usblp->readbuf); @@ -1085,8 +1097,9 @@ /* if the fault was due to disconnect, let khubd's * call to usblp_disconnect() grab usblp->sem ... */ - schedule (); - continue; + return writecount; //Added by PaN + //schedule (); //Removed by PaN + //continue; } writecount += usblp->writeurb->transfer_buffer_length;