A couple of stupid errors snuck into packet-0.0.2a release. First of all, the io_request_lock booboo mentioned below. And then I rediscovered (yes, I've done this before) that SCSI uses the request queue queuedata field to store the pointer to the SCSI device. So now I have to copy that and hack around it. Ben created a CDRW branch of the UDF cvs tree, which has the block_empty function to query blocks for data. I'll release a packet-0.0.2b later today with these fixes, plus include the code to query for empty blocks. This last part alone should give us a _huge_ speed increase! I'll be testing just how much before releasing.
Battling with IDE locking, it's a big mess... I've taken the task of rewriting the internal locking upon me, let's see how this goes.