--- libaitio/src/aio.c 2011/04/19 22:32:16 1.2.8.2 +++ libaitio/src/aio.c 2012/08/01 09:37:20 1.5.14.2 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aio.c,v 1.2.8.2 2011/04/19 22:32:16 misho Exp $ +* $Id: aio.c,v 1.5.14.2 2012/08/01 09:37:20 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -12,7 +12,7 @@ terms: All of the documentation and software included in the ELWIX and AITNET Releases is copyrighted by ELWIX - Sofia/Bulgaria -Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 +Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -27,11 +27,11 @@ are met: must display the following acknowledgement: This product includes software developed by Michael Pounov ELWIX - Embedded LightWeight unIX and its contributors. -4. Neither the name of the University nor the names of its contributors +4. Neither the name of AITNET nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE @@ -46,8 +46,13 @@ SUCH DAMAGE. #include "global.h" +/* default AIO completion request timeout */ +struct timespec aiots = { 10, 0 }; + + /* - * io_rread() Raw VFS read function + * io_rread() - Raw VFS read function + * * @fd = File handle * @buf = Read buffer * @nbytes = Read buffer size @@ -61,11 +66,11 @@ io_rread(int fd, void * __restrict buf, size_t nbytes, int ret; #ifdef AIO_OPS off_t old = 0; - struct aiocb acb; + struct aiocb acb, *racb; #endif if (!buf) { - io_SetErr(EINVAL, "Error:: invalid arguments ...\n"); + io_SetErr(EINVAL, "Invalid arguments"); return -1; } if (!nbytes) @@ -101,13 +106,15 @@ io_rread(int fd, void * __restrict buf, size_t nbytes, return -1; } +#if 0 while (aio_error(&acb) == EINPROGRESS); ret = aio_return(&acb); +#endif + ret = aio_waitcomplete(&racb, &aiots); if (ret == -1) { LOGERR; return -1; - } else - ret = acb.aio_nbytes; + } #else ret = pread(fd, buf, nbytes, offset); if (ret == -1) { @@ -123,7 +130,8 @@ io_rread(int fd, void * __restrict buf, size_t nbytes, } /* - * io_rwrite() Raw VFS write function + * io_rwrite() - Raw VFS write function + * * @fd = File handle * @buf = Write buffer * @nbytes = Write bytes from buffer @@ -136,11 +144,11 @@ io_rwrite(int fd, void * __restrict buf, size_t nbytes { int ret; #ifdef AIO_OPS - struct aiocb acb; + struct aiocb acb, *racb; #endif if (!buf) { - io_SetErr(EINVAL, "Error:: invalid arguments ...\n"); + io_SetErr(EINVAL, "Invalid arguments"); return -1; } if (!nbytes) @@ -165,13 +173,15 @@ io_rwrite(int fd, void * __restrict buf, size_t nbytes return -1; } +#if 0 while (aio_error(&acb) == EINPROGRESS); ret = aio_return(&acb); +#endif + ret = aio_waitcomplete(&racb, &aiots); if (ret == -1) { LOGERR; return -1; - } else - ret = acb.aio_nbytes; + } #else ret = pwrite(fd, buf, nbytes, offset); if (ret == -1) {