If this patch-set is merged, there may be other way to do that.
For tricky drivers, special interface, blk_end_request_callback(),
is added in the patch 5/7.
(http://marc.info/?l=linux-kernel&m=118860027714753&w=2)
Currently, only user of the interface is ide-cd (cdrom_newpc_intr()).
It needs to call only end_that_request_first() too.
With the patch 7/7, you can set your own handler in rq->end_io()
to complete the request by your own way.
Thanks,
Kiyoshi Ueda
-