Thanks Andrea. Patch is merged.

Regards--
Subrata

On Sat, 2008-07-12 at 14:18 +0200, Andrea Righi wrote:
> According to the manpages io_submit() can return the value:
> 
> EAGAIN Insufficient resources are available to queue any iocbs.
> 
> We should handle this opportunely trying to re-submit the AIO request
> again. Maybe an even better approach could be to just sleep a bit before
> trying to re-submit the request.
> 
> In any case this would resolve a never-ending loop in aio01.c, where
> io_getevents() can be continuously called without having issued any
> actual request if io_submit() failed with -EAGAIN.
> 
> Signed-off-by: Andrea Righi <[EMAIL PROTECTED]>
> ---
> 
> diff -urpN ltp/testcases/kernel/io/aio/aio01/aio01.c 
> ltp-mod/testcases/kernel/io/aio/aio01/aio01.c
> --- ltp/testcases/kernel/io/aio/aio01/aio01.c 2008-07-12 13:48:56.000000000 
> +0200
> +++ ltp-mod/testcases/kernel/io/aio/aio01/aio01.c     2008-07-12 
> 13:50:22.000000000 +0200
> @@ -131,8 +131,10 @@ int main(int argc, char **argv) {
>       for(i = 0; i< nr; i++) {
>               ts.tv_sec = 30;
>               ts.tv_nsec = 0;
> -             TEST(io_submit(io_ctx, 1, iocbs));
> -             if (TEST_RETURN == -1) {
> +             do {
> +                     TEST(io_submit(io_ctx, 1, iocbs));
> +             } while (TEST_RETURN == -EAGAIN);
> +             if (TEST_RETURN < 0) {
>                       TEST_ERROR_LOG(TEST_ERRNO);
>                       tst_resm(TFAIL, "Test 1: io_submit failed - retval=%d, "
>                                       "errno=%d", TEST_RETURN, TEST_ERRNO);
> @@ -161,8 +163,10 @@ int main(int argc, char **argv) {
>       for(i = 0; i< nr; i++) {
>               ts.tv_sec = 30;
>               ts.tv_nsec = 0;
> -             TEST(io_submit(io_ctx, 1, iocbs));
> -             if (TEST_RETURN == -1) {
> +             do {
> +                     TEST(io_submit(io_ctx, 1, iocbs));
> +             } while (TEST_RETURN == -EAGAIN);
> +             if (TEST_RETURN < 0) {
>                       TEST_ERROR_LOG(TEST_ERRNO);
>                       tst_resm(TFAIL, "Test 2: io_submit failed - retval=%d, "
>                                       "errno=%d", TEST_RETURN, TEST_ERRNO);
> @@ -191,8 +195,10 @@ int main(int argc, char **argv) {
>               io_prep_pwrite(iocbs[0], fd, srcbuf, bufsize, pos);
>               ts.tv_sec = 30;
>               ts.tv_nsec = 0;
> -             TEST(io_submit(io_ctx, 1, iocbs));
> -             if (TEST_RETURN == -1) {
> +             do {
> +                     TEST(io_submit(io_ctx, 1, iocbs));
> +             } while (TEST_RETURN == -EAGAIN);
> +             if (TEST_RETURN < 0) {
>                       TEST_ERROR_LOG(TEST_ERRNO);
>                       tst_resm(TFAIL, "Test 3: io_submit failed - retval=%d, "
>                                       "errno=%d", TEST_RETURN, TEST_ERRNO);
> @@ -221,8 +227,10 @@ int main(int argc, char **argv) {
>               io_prep_pread(iocbs[0], fd, dstbuf, bufsize, pos);
>               ts.tv_sec = 30;
>               ts.tv_nsec = 0;
> -             TEST(io_submit(io_ctx, 1, iocbs));
> -             if (TEST_RETURN == -1) {
> +             do {
> +                     TEST(io_submit(io_ctx, 1, iocbs));
> +             } while (TEST_RETURN == -EAGAIN);
> +             if (TEST_RETURN < 0) {
>                       TEST_ERROR_LOG(TEST_ERRNO);
>                       tst_resm(TFAIL, "Test 4: io_submit failed - retval=%d, "
>                                       "errno=%d", TEST_RETURN, TEST_ERRNO);
> @@ -251,8 +259,10 @@ int main(int argc, char **argv) {
>               io_prep_pwrite(iocbs[0], fd, srcbuf, bufsize, pos);
>               ts.tv_sec = 30;
>               ts.tv_nsec = 0;
> -             TEST(io_submit(io_ctx, 1, iocbs));
> -             if (TEST_RETURN == -1) {
> +             do {
> +                     TEST(io_submit(io_ctx, 1, iocbs));
> +             } while (TEST_RETURN == -EAGAIN);
> +             if (TEST_RETURN < 0) {
>                       TEST_ERROR_LOG(TEST_ERRNO);
>                       tst_resm(TFAIL, "Test 5: write io_submit failed - "
>                                       "retval=%d, errno=%d", TEST_RETURN, 
> @@ -264,8 +274,10 @@ int main(int argc, char **argv) {
>               io_prep_pread(iocbs[0], fd, dstbuf, bufsize, pos);
>               ts.tv_sec = 30;
>               ts.tv_nsec = 0;
> -             TEST(io_submit(io_ctx, 1, iocbs));
> -             if (TEST_RETURN == -1) {
> +             do {
> +                     TEST(io_submit(io_ctx, 1, iocbs));
> +             } while (TEST_RETURN == -EAGAIN);
> +             if (TEST_RETURN < 0) {
>                       TEST_ERROR_LOG(TEST_ERRNO);
>                       tst_resm(TFAIL, "Test 5: read io_submit failed - "
>                                       "retval=%d, errno=%d", TEST_RETURN, 
> @@ -295,8 +307,10 @@ int main(int argc, char **argv) {
>               io_prep_pwrite(iocbs[0], fd, srcbuf, bufsize, pos);
>               ts.tv_sec = 30;
>               ts.tv_nsec = 0;
> -             TEST(io_submit(io_ctx, 1, iocbs));
> -             if (TEST_RETURN == -1) {
> +             do {
> +                     TEST(io_submit(io_ctx, 1, iocbs));
> +             } while (TEST_RETURN == -EAGAIN);
> +             if (TEST_RETURN < 0) {
>                       TEST_ERROR_LOG(TEST_ERRNO);
>                       tst_resm(TFAIL, "Test 6: write io_submit failed - "
>                                       "retval=%d, errno=%d", TEST_RETURN, 
> @@ -308,8 +322,10 @@ int main(int argc, char **argv) {
>               io_prep_pread(iocbs[0], fd, dstbuf, bufsize, pos);
>               ts.tv_sec = 30;
>               ts.tv_nsec = 0;
> -             TEST(io_submit(io_ctx, 1, iocbs));
> -             if (TEST_RETURN == -1) {
> +             do {
> +                     TEST(io_submit(io_ctx, 1, iocbs));
> +             } while (TEST_RETURN == -EAGAIN);
> +             if (TEST_RETURN < 0) {
>                       TEST_ERROR_LOG(TEST_ERRNO);
>                       tst_resm(TFAIL, "Test 6: read io_submit failed - "
>                                       "retval=%d, errno=%d", TEST_RETURN, 
> diff -urpN ltp/testcases/kernel/io/aio/aio02/cases/aio_tio.c 
> ltp-mod/testcases/kernel/io/aio/aio02/cases/aio_tio.c
> --- ltp/testcases/kernel/io/aio/aio02/cases/aio_tio.c 2008-07-12 
> 13:48:56.000000000 +0200
> +++ ltp-mod/testcases/kernel/io/aio/aio02/cases/aio_tio.c     2008-07-12 
> 14:10:49.000000000 +0200
> @@ -153,7 +153,10 @@ int io_tio(char *pathname , int flag , i
>               }
>       }
>       
> -     if (( res = io_submit ( myctx , AIO_MAXIO , iocbps )) < 0 ) {
> +     do {
> +             res = io_submit(myctx , AIO_MAXIO , iocbps);
> +     } while (res == -EAGAIN);
> +     if (res < 0 ) {
>               io_error("io_submit tio", res);
>       }
>       


-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to