The following reply was made to PR misc/146687; it has been noted by GNATS.

From: dfil...@freebsd.org (dfilter service)
To: bug-follo...@freebsd.org
Cc:  
Subject: Re: misc/146687: commit references a PR
Date: Tue, 22 Feb 2011 05:13:34 +0000 (UTC)

 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 <gcoo...@freebsd.org>
   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/<arch>/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/<something safe>)
   */
  
 +#include <sys/types.h>
 +#include <sys/event.h>
 +#include <sys/time.h>
  #include <aio.h>
 +#include <err.h>
 +#include <errno.h>
  #include <fcntl.h>
  #include <stdlib.h>
  #include <stdio.h>
 -#include <errno.h>
 -#include <sys/types.h>
 -#include <sys/event.h>
 -#include <sys/time.h>
 +#include <string.h>
  #include <unistd.h>
  
  #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);
  }
 _______________________________________________
 svn-src-...@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"
 
_______________________________________________
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to