Index: /trunk/src/VBox/Runtime/r3/freebsd/fileaio-freebsd.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r3/freebsd/fileaio-freebsd.cpp	(revision 29832)
+++ /trunk/src/VBox/Runtime/r3/freebsd/fileaio-freebsd.cpp	(revision 29833)
@@ -407,5 +407,5 @@
             if (RT_UNLIKELY(rcBSD < 0))
             {
-                if (rcBSD == EAGAIN)
+                if (errno == EAGAIN)
                     rc = VERR_FILE_AIO_INSUFFICIENT_RESSOURCES;
                 else
@@ -417,5 +417,5 @@
                     pReqInt = pahReqs[i];
                     rcBSD = aio_error(&pReqInt->AioCB);
-                    if (rcBSD == EINVAL)
+                    if (rcBSD == EINVAL || rcBSD == EAGAIN)
                     {
                         /* Was not submitted. */
@@ -441,5 +441,5 @@
 
         /* Check if we have a flush request now. */
-        if (cReqs)
+        if (cReqs && RT_SUCCESS_NP(rc))
         {
             pReqInt = pahReqs[0];
@@ -455,8 +455,18 @@
                  if (RT_UNLIKELY(rcBSD < 0))
                  {
-                    RTFILEAIOREQ_SET_STATE(pReqInt, COMPLETED);
-                    pReqInt->Rc = RTErrConvertFromErrno(errno);
-                    pReqInt->cbTransfered = 0;
-                    return pReqInt->Rc;
+                    if (rcBSD == EAGAIN)
+                    {
+                        /* Was not submitted. */
+                        RTFILEAIOREQ_SET_STATE(pReqInt, PREPARED);
+                        pReqInt->pCtxInt = NULL;
+                        return VERR_FILE_AIO_INSUFFICIENT_RESSOURCES;
+                    }
+                    else
+                    {
+                        RTFILEAIOREQ_SET_STATE(pReqInt, COMPLETED);
+                        pReqInt->Rc = RTErrConvertFromErrno(errno);
+                        pReqInt->cbTransfered = 0;
+                        return pReqInt->Rc;
+                    }
                  }
 
