From owner-svn-src-all@FreeBSD.ORG Tue Feb 22 05:13:27 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 47283106564A; Tue, 22 Feb 2011 05:13:27 +0000 (UTC) (envelope-from miwi@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 352CC8FC0C; Tue, 22 Feb 2011 05:13:27 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p1M5DRSa095044; Tue, 22 Feb 2011 05:13:27 GMT (envelope-from miwi@svn.freebsd.org) Received: (from miwi@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1M5DRrQ095042; Tue, 22 Feb 2011 05:13:27 GMT (envelope-from miwi@svn.freebsd.org) Message-Id: <201102220513.p1M5DRrQ095042@svn.freebsd.org> From: Martin Wilke Date: Tue, 22 Feb 2011 05:13:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r218938 - head/tools/regression/aio/kqueue X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Feb 2011 05:13:27 -0000 Author: miwi Date: Tue Feb 22 05:13:26 2011 New Revision: 218938 URL: http://svn.freebsd.org/changeset/base/218938 Log: - Fix QA issues PR: misc/146687 Submitted by: Garrett Cooper Approved by: rwatson (mentor) Modified: head/tools/regression/aio/kqueue/aio_kqueue.c Modified: head/tools/regression/aio/kqueue/aio_kqueue.c ============================================================================== --- head/tools/regression/aio/kqueue/aio_kqueue.c Tue Feb 22 05:10:13 2011 (r218937) +++ head/tools/regression/aio/kqueue/aio_kqueue.c Tue Feb 22 05:13:26 2011 (r218938) @@ -26,18 +26,24 @@ */ /* + * Prerequisities: + * - AIO support must be compiled into the kernel (see sys//NOTES for + * more details). + * * Note: it is a good idea to run this against a physical drive to * exercise the physio fast path (ie. aio_kqueue /dev/) */ +#include +#include +#include #include +#include +#include #include #include #include -#include -#include -#include -#include +#include #include #define PATH_TEMPLATE "/tmp/aio.XXXXXXXXXX" @@ -46,7 +52,9 @@ #define MAX_RUNS 300 /* #define DEBUG */ -main(int argc, char *argv[]){ +int +main (int argc, char *argv[]) +{ int fd; struct aiocb *iocb[MAX], *kq_iocb; int i, result, run, error, j; @@ -55,7 +63,7 @@ main(int argc, char *argv[]){ struct kevent ke, kq_returned; struct timespec ts; int cancel, pending, tmp_file = 0, failed = 0; - char *file, pathname[sizeof(PATH_TEMPLATE)-1]; + char *file, pathname[sizeof(PATH_TEMPLATE)+1]; if (kq < 0) { perror("No kqeueue\n"); @@ -71,23 +79,22 @@ main(int argc, char *argv[]){ file = argv[1]; fd = open(file, O_RDWR|O_CREAT, 0666); } - if (fd < 0){ - fprintf(stderr, "Can't open %s\n", file); - perror(""); - exit(1); - } + if (fd == -1) + err(1, "Can't open %s\n", file); for (run = 0; run < MAX_RUNS; run++){ #ifdef DEBUG printf("Run %d\n", run); #endif - for(i = 0; i < MAX; i++) { - iocb[i] = (struct aiocb *)malloc(sizeof(struct aiocb)); - bzero(iocb[i], sizeof(struct aiocb)); + for (i = 0; i < MAX; i++) { + iocb[i] = (struct aiocb *)calloc(1, + sizeof(struct aiocb)); + if (iocb[i] == NULL) + err(1, "calloc"); } pending = 0; - for(i = 0; i < MAX; i++) { + for (i = 0; i < MAX; i++) { pending++; iocb[i]->aio_nbytes = sizeof(buffer); iocb[i]->aio_buf = buffer; @@ -101,7 +108,7 @@ main(int argc, char *argv[]){ result = aio_write(iocb[i]); if (result != 0) { perror("aio_write"); - printf("Result %d iteration %d\n",result, i); + printf("Result %d iteration %d\n", result, i); exit(1); } #ifdef DEBUG @@ -116,7 +123,7 @@ main(int argc, char *argv[]){ #endif if (result == AIO_CANCELED) { aio_return(iocb[i]); - iocb[i]=NULL; + iocb[i] = NULL; pending--; } } @@ -125,8 +132,10 @@ main(int argc, char *argv[]){ cancel = MAX - pending; i = 0; - while(pending) { - for(;;) { + while (pending) { + + for (;;) { + bzero(&ke, sizeof(ke)); bzero(&kq_returned, sizeof(ke)); ts.tv_sec = 0; @@ -134,9 +143,8 @@ main(int argc, char *argv[]){ result = kevent(kq, NULL, 0, &kq_returned, 1, &ts); error = errno; - if (result < 0) { + if (result < 0) perror("kevent error: "); - } kq_iocb = kq_returned.udata; #ifdef DEBUG printf("kevent %d %d errno %d return.ident %p " @@ -147,51 +155,53 @@ main(int argc, char *argv[]){ kq_iocb); #endif - if(kq_iocb) + if (kq_iocb) break; #ifdef DEBUG - printf("Try again left %d out of %d %d\n",pending, MAX, cancel); + printf("Try again left %d out of %d %d\n", + pending, MAX, cancel); #endif } - for(j = 0; j < MAX; j++) { - if (iocb[j] == kq_iocb) { - break; - } - } + for (j = 0; j < MAX && iocb[j] != kq_iocb; + j++) ; #ifdef DEBUG printf("kq_iocb %p\n", kq_iocb); - printf("Error Result for %d is %d pending %d\n", j, result, pending); + printf("Error Result for %d is %d pending %d\n", + j, result, pending); #endif result = aio_return(kq_iocb); #ifdef DEBUG - printf("Return Result for %d is %d\n", j, result); - printf("\n"); + printf("Return Result for %d is %d\n\n", j, result); #endif if (result != sizeof(buffer)) { - printf("FAIL: run %d, operation %d, result %d (errno=%d) should be %d\n", run, pending, result, errno, sizeof(buffer)); - failed = 1; - } else { - printf("PASS: run %d, left %d\n", run, pending - 1); - } + printf("FAIL: run %d, operation %d, result %d " + " (errno=%d) should be %d\n", run, pending, + result, errno, sizeof(buffer)); + failed++; + } else + printf("PASS: run %d, left %d\n", run, + pending - 1); free(kq_iocb); iocb[j] = NULL; pending--; i++; } + + for (i = 0; i < MAX; i++) + free(iocb[i]); + } - if (tmp_file) { + if (tmp_file) unlink(pathname); - } - if (failed) { - printf("FAIL: Atleast one\n"); - exit(1); - } else { - printf("PASS: All\n"); - exit(0); - } + if (failed != 0) + printf("FAIL: %d tests failed\n", failed); + else + printf("PASS: All tests passed\n"); + + exit (failed == 0 ? 0 : 1); }