@Einstein
How do you initialize the io request (diskio)? It must be initialized properly. Usually this is made with CreateMsgPort + CreateIORequest (cleanup with DeleteIORequest, DeleteMsgPort).
Also, from look of the code, I think you should use DoIO (-456) instead of SendIO (-462). SendIO is asyncron, so you'd need to WaitIO manually to sync. DoIO does this for you automagic.