Does your strace output show any fcntl() calls? I believe it's possible (maybe even necessary?) to set attributes like O_DIRECT and O_ASYNC using fcntl() as well as during the original open().