Hi! > diff --git a/testcases/kernel/io/stress_cd/stress_cd.c > b/testcases/kernel/io/stress_cd/stress_cd.c > index 0209a1f..6e13afa 100644 > --- a/testcases/kernel/io/stress_cd/stress_cd.c > +++ b/testcases/kernel/io/stress_cd/stress_cd.c > @@ -1,6 +1,7 @@ > /* > - * > * Copyright (c) International Business Machines Corp., 2001 > + * 06/20/2001 Robbie Williamson (robb...@us.ibm.com) > + * 11/08/2001 Manoj Iyer (ma...@austin.ibm.com) > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License as published by > @@ -13,37 +14,19 @@ > * the GNU General Public License for more details. > * > * You should have received a copy of the GNU General Public License > - * along with this program; if not, write to the Free Software > - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > 02110-1301 USA > + * along with this program; if not, write to the Free Software Foundation, > + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA > */ > > /* > - * FILE : stress_cd.c > - * DESCRIPTION : creates multiple read threads on the cdrom device. > - * HISTORY: > - * 06/20/2001 Robbie Williamson (robb...@us.ibm.com) > - * -Ported > - * 11/08/2001 Manoj Iyer (ma...@austin.ibm.com) > - * - Modified. > - * - removed compiler warnings. > - * - Added #include <sys/types.h>, #include <unistd.h> and > - * #include <string.h> > - * - print unsigned long correctly in printf() use "lx" instead of "x" > - * - added missing parameter in usage message. > - * > -+--------------------------------------------------------------------+ > -| | > -| Usage: cdtest [-n n] [-f file] [-m xx] [-d] | > -| | > -| where: | > -| -n n Number of threads to create | > -| -f file File or device to read from | > -| -m xx Number of MB to read from file | > -| -b xx Number of bytes to read from file | > -| -d Enable debugging messages | > -| | > -| | > -+-------------------------------------------------------------------*/ > + * Usage: stress_cd [-n n] [-f file] [-m xx] [-d] > + * where: > + * -n n Number of threads to create > + * -f file File or device to read from > + * -m xx Number of MB to read from file > + * -b xx Number of bytes to read from file > + * -d Enable debugging messages > + */ > > #include <pthread.h> > #include <fcntl.h> > @@ -55,46 +38,21 @@ > #include <unistd.h> > #include <string.h> > > -/* Defines > - * > - * DEFAULT_NUM_THREADS: Default number of threads to create, > - * user can specifiy with [-n] command line option. > - * > - * USAGE: usage statement > - */ > -#define DEFAULT_NUM_THREADS 10 > -#define DEFAULT_NUM_BYTES 1024*1024*100 /* 100Mb */ > -#define DEFAULT_FILE "/dev/cdrom" > +#define DEFAULT_NUM_THREADS 10 > +#define DEFAULT_NUM_BYTES (1024*1024*100) /* 100Mb */ > +#define DEFAULT_FILE "/dev/cdrom" > > -/* > - * Function prototypes > - * > - * sys_error (): System error message function > - * error (): Error message function > - * parse_args (): Parses command line arguments > - */ > static void sys_error(const char *, int); > -static void error(const char *, int); > static void parse_args(int, char **); > -void *thread(int *); > -int read_data(int, unsigned long); > +static void *thread(int *); > +static int read_data(int, unsigned long *); > + > +static int num_threads = DEFAULT_NUM_THREADS; > +static int num_bytes = DEFAULT_NUM_BYTES; > +static char *file = DEFAULT_FILE; > +static unsigned long checksum; > +static int debug; > > -/* > - * Global Variables > - */ > -int num_threads = DEFAULT_NUM_THREADS; > -int num_bytes = DEFAULT_NUM_BYTES; > -char *file = DEFAULT_FILE; > -unsigned long checksum = 0; > -int debug = 0; > - > -/*-------------------------------------------------------------------+ > -| main () | > -| ================================================================== | > -| | > -| Function: Main program (see prolog for more details) | > -| | > -+-------------------------------------------------------------------*/ > int main(int argc, char **argv) > { > pthread_attr_t attr; > @@ -106,17 +64,16 @@ int main(int argc, char **argv) > parse_args(argc, argv); > > /* Read data from CDROM & compute checksum */ > - read_data(0, checksum); > + read_data(0, &checksum);
Nice catch :) So the testcases wasn't checking the checksums at all... > if (debug) > - printf("Thread [main] checksum: %-#12lx \n", checksum); > + printf("\tThread [main] checksum: %-#12lx\n", checksum); What is the use for the '\t' here? As far as I can see the printed strings in the testcase ends up with '\n' anyway and so the printed statement starts at first column anyway. > if (pthread_attr_init(&attr)) > sys_error("pthread_attr_init failed", __LINE__); > if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE)) > sys_error("pthread_attr_setdetachstate failed", __LINE__); > > - /* Create num_thread threads... */ > - printf("\tThread [main] Creating %d threads\n", num_threads); > + printf("Thread [main] Creating %d threads\n", num_threads); > > array = malloc(sizeof(pthread_t) * num_threads); > arg = malloc(sizeof(int) * num_threads); Can we also get rid of allocations and decleare the arrays as: pthread_t array[num_threads]; instead? > @@ -126,15 +83,15 @@ int main(int argc, char **argv) > if (debug) > printf("\tThread [main]: creating thread %d\n", i + 1); > arg[i] = i + 1; > - if (pthread_create > - ((pthread_t *) & array[i], &attr, (void *)thread, > - (void *)&arg[i])) { > - if (errno == EAGAIN) > + if (pthread_create((pthread_t *)&array[i], &attr, > + (void *)thread, (void *)&arg[i])) { > + if (errno == EAGAIN) { > fprintf(stderr, > - "\tThread [main]: unable to create > thread %d\n", > - i); > - else > + "\tThread [main]: unable to create " > + "thread %d\n", i); > + } else { > sys_error("pthread_create failed", __LINE__); > + } > } > if (debug) > printf("\tThread [main]: created thread %d\n", i + 1); > @@ -144,8 +101,7 @@ int main(int argc, char **argv) > > for (i = 0; i < num_threads; i++) { > void *exit_value; > - printf("\tThread [main]: waiting for thread: %d\n", i + 1); > - /*if (pthread_join ((pthread_t*) array [i], (void **) > &exit_value)) */ > + printf("Thread [main]: waiting for thread: %d\n", i + 1); > if (pthread_join(array[i], &exit_value)) > sys_error("pthread_join failed", __LINE__); > > @@ -157,25 +113,16 @@ int main(int argc, char **argv) > free(array); > free(arg); ... > - /* One or more of the threads did not complete sucessfully! */ > if (rc != 0) { > printf("test failed!\n"); > exit(-1); > + } else { > + printf("Thread [main] All threads completed successfully...\n"); > + exit(0); > } > - > - /* Program completed successfully... */ > - printf("\tThread [main] All threads completed successfully...\n"); > - exit(0); There is no need for this particular change. If we enter the if block we will exit at exit(-1) otherwise we continue to the end of the function. > } > > -/*-------------------------------------------------------------------+ > -| thread () | > -| ================================================================== | > -| | > -| Function: ... | > -| | > -+-------------------------------------------------------------------*/ > -void *thread(int *parm) > +static void *thread(int *parm) > { > int num = *parm; > unsigned long cksum = 0; > @@ -183,7 +130,7 @@ void *thread(int *parm) > if (debug) > printf("\tThread [%d]: begin\n", num); > > - read_data(num, cksum); > + read_data(num, &cksum); > if (checksum != cksum) { > fprintf(stderr, "\tThread [%d]: checksum mismatch!\n", num); > pthread_exit((void *)-1); > @@ -193,17 +140,9 @@ void *thread(int *parm) > printf("\tThread [%d]: done\n", num); > > pthread_exit(NULL); > - return (NULL); > } > > -/*-------------------------------------------------------------------+ > -| read_data () | > -| ================================================================== | > -| | > -| Function: Reads data from the CDROM | > -| | > -+-------------------------------------------------------------------*/ > -int read_data(int num, unsigned long cksum) > +static int read_data(int num, unsigned long *cksum) > { > int fd; > const int bufSize = 1024; > @@ -223,23 +162,25 @@ int read_data(int num, unsigned long cksum) > > lseek(fd, 1024 * 36, SEEK_SET); > while (bytes_read < num_bytes) { > - if ((n = read(fd, buffer, bufSize)) < 0) > + n = read(fd, buffer, bufSize); > + if (n < 0) > sys_error("read failed", __LINE__); > + else if (n == 0) > + sys_error("End of file", __LINE__); > bytes_read += n; > > for (p = buffer; p < buffer + n; p++) > - cksum += *p; > + *cksum += *p; > > if (debug) > - printf > - ("\tThread [%d] bytes read: %5d checksum: > %-#12lx\n", > - num, bytes_read, cksum); > + printf("\tThread [%d] bytes read: %5d checksum: " > + "%-#12lx\n", num, bytes_read, *cksum); > } > free(buffer); > > if (debug) > printf("\tThread [%d] bytes read: %5d checksum: %-#12lx\n", > - num, bytes_read, cksum); > + num, bytes_read, *cksum); > > if (close(fd) < 0) > sys_error("close failed", __LINE__); > @@ -250,20 +191,6 @@ int read_data(int num, unsigned long cksum) > return (0); > } > > -/*-------------------------------------------------------------------+ > -| parse_args () | > -| ================================================================== | > -| | > -| Function: Parse the command line arguments & initialize global | > -| variables. | > -| | > -| Updates: (command line options) | > -| | > -| [-n] num number of threads to create | > -| | > -| [-d] enable debugging messages | > -| | > -+-------------------------------------------------------------------*/ > static void parse_args(int argc, char **argv) > { > int i; > @@ -297,6 +224,10 @@ static void parse_args(int argc, char **argv) > errflag++; > fprintf(stderr, "ERROR: num_bytes must be greater than 0"); > } > + if (num_threads < 0) { > + errflag++; > + fprintf(stderr, "ERROR: num_threads must be greater than 0"); > + } > > if (errflag) { > fprintf(stderr, "\nUsage: %s" > @@ -311,30 +242,8 @@ static void parse_args(int argc, char **argv) > } > } > > -/*-------------------------------------------------------------------+ > -| sys_error () | > -| ================================================================== | > -| | > -| Function: Creates system error message and calls error () | > -| | > -+-------------------------------------------------------------------*/ > static void sys_error(const char *msg, int line) > { > - char syserr_msg[256]; > - > - sprintf(syserr_msg, "%s: %s\n", msg, strerror(errno)); > - error(syserr_msg, line); > -} > - > -/*-------------------------------------------------------------------+ > -| error () | > -| ================================================================== | > -| | > -| Function: Prints out message and exits... | > -| | > -+-------------------------------------------------------------------*/ > -static void error(const char *msg, int line) > -{ > - fprintf(stderr, "ERROR [line: %s] \n", msg); > + fprintf(stderr, "ERROR [%d: %s: %s]\n", line, msg, strerror(errno)); > exit(-1); > } > -- > 1.9.3 > > > > > ------------------------------------------------------------------------------ > Comprehensive Server Monitoring with Site24x7. > Monitor 10 servers for $9/Month. > Get alerted through email, SMS, voice calls or mobile push notifications. > Take corrective actions from your mobile device. > http://p.sf.net/sfu/Zoho > _______________________________________________ > Ltp-list mailing list > Ltp-list@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/ltp-list -- Cyril Hrubis chru...@suse.cz ------------------------------------------------------------------------------ Comprehensive Server Monitoring with Site24x7. Monitor 10 servers for $9/Month. Get alerted through email, SMS, voice calls or mobile push notifications. Take corrective actions from your mobile device. http://pubads.g.doubleclick.net/gampad/clk?id=154624111&iu=/4140/ostg.clktrk _______________________________________________ Ltp-list mailing list Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list