Yes, I see your point. Suppose you try doing the exact same thing
again, but this time un-comment the put_device() call so that the
scsi_device does get released. I predict that the log will show your
request_queue drops its reference to the gendisk structure _after_ the
gendisk has been released. (If necessary I could send a patch with a
printk at the crucial spot.) That would prove something is going wrong
on your system.
(BTW you don't need to include the log for when you plug in the USB
drive; all that matters is what happens when you unplug it.)
Alan Stern
-