I believe the erratic performance davem saw is now fixed. Instead of having two request_freelist heads (one for reads and one for writes, where reads can steal from the write list if necessary) I use a single list head to hold the requests and let a counter keep track of when writes should block in get_request_wait. Writes can consume 2/3 of the queue, just like before. This approach has a couple of advantages, although it does not "seem" as clean. We save a bit of space in request_queue_t and struct request and get_request is simpler than before. I'm waiting to hear from davem claiming his free beer, before submitting this.
Removed the BROKEN_CAP_PAGE in ide-cd and let a simple id scan decide whether to include the full mode page cap size or not. Should make all drives happy, old as well as ACER50 and similar.
Started a document detailing the Linux block driver stuff.