Why do you think that REQ_TYPE_BLOCK_PC has anything to do with SG?
It has *nothing* to do with SG, and anybody who uses SG in this day and
age on a block device is just crazy.
The way you do generic SCSI commands (on perfectly normal block device
nodes) is using the SCSI ioctl() interfaces. That's how you are supposed
to do things like burn DVD's or do any kind of special ops.
So REQ_TYPE_BLOCK_PC does quite commonly happen on perfectly regular block
devices, it's how all commands that aren't pure reads or writes done by
the kernel behave.
If you actually use /dev/sg*, you will be using the SG driver, and if you
don't want that to have a ->done callback, then just set "done" to NULL
for sg_driver.
Linus
--