Fix properly return buffer size on asynchronous read

The asynchronous read call may return a buffer shorter than the
requested size. We need to check the return value of the aio call
and update size accordingly.