Thanks for testing this, Anders!
> I did my usual "cat /boot/bzImage > /dev/usb/lp0" immediately after
> turning my printer off, which usually results in an oops and a kernel
> lockup. With David's patch, however, the kernel just got busy
> printing the line over and over again:
>
> printer.c: usblp0: failed reading printer status
Looks like usblp_write() line 402 should verify the printer is still
present before calling usblp_check_status and looping. That
also explains why unplug/replug did nothing: It's holding the
semaphore that usblp_disconnect() needs to get to do its job,
tying up khubd...
> rmmod usbcore printer usb-ohci
>
> Besides from stopping the error messages, this also produced an oops,
> see the data below about this.
Which fingers that same bad usblp_check_status() call.
Updated patch attached. That usblp_write() routine looks iffier to me
the more I look at it ...
- Dave
printer-0518.patch