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 ([email protected])
> + * 11/08/2001 Manoj Iyer ([email protected])
> *
> * 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 ([email protected])
> - * -Ported
> - * 11/08/2001 Manoj Iyer ([email protected])
> - * - 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
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ltp-list
--
Cyril Hrubis
[email protected]
------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list