Here is a 2.5.35 patch to make DIO async. Basically, DIO does notwait for io completion. Waiting will be done at the higher level(same way generic_file_read does).

Here is what I did:

1) pass kiocb *iocb to DIO2) allocated a "dio" (instead of using stack)3) after submitting bios, dio code returns with -EIOCBQUEUED4) removed dio_bio_end_io(), dio_await_one(), dio_await_completion()5) added dio_bio_end_aio() which calls dio_bio_complete() for each bio and if the dio_biocount becomes 0, it calls aio_complete()6) changed raw_read/raw_write/.. routines to pass a sync_cb and wait on it.