>From 35bf35d4098284f26b641fb0cd0a9524b1d98627 Mon Sep 17 00:00:00 2001 From: Zeng Linggang <zenglg...@cn.fujitsu.com> Date: Wed, 12 Nov 2014 13:59:52 +0800 Subject: [PATCH] stress_cd: Cleanup
* Delete some useless commtents. * Add 'static' before functions and global variables. * In 'read_data()' the second variable is local and it would not change after 'read_data()' is over. Defined it as a pointer. * Remove 'return' that follows 'pthread_exit()'. * Add branch 'read() returndd 0' that indicates end of file. * Merge 'syserror()' and 'error()'. * Some cleanup. Signed-off-by: Zeng Linggang <zenglg...@cn.fujitsu.com> --- testcases/kernel/io/stress_cd/stress_cd.c | 198 ++++++++---------------------- 1 file changed, 51 insertions(+), 147 deletions(-) diff --git a/testcases/kernel/io/stress_cd/stress_cd.c b/testcases/kernel/io/stress_cd/stress_cd.c index 0209a1f..ede1871 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,86 +38,57 @@ #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; - pthread_t *array; - int *arg; int rc = 0, i; /* Parse command line arguments and print out program header */ parse_args(argc, argv); /* Read data from CDROM & compute checksum */ - read_data(0, checksum); + read_data(0, &checksum); if (debug) - printf("Thread [main] checksum: %-#12lx \n", checksum); + printf("Thread [main] checksum: %-#12lx\n", checksum); 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); - array = malloc(sizeof(pthread_t) * num_threads); - arg = malloc(sizeof(int) * num_threads); - assert(array); - assert(arg); + pthread_t array[num_threads]; + int arg[num_threads]; + for (i = 0; i < num_threads; i++) { 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); @@ -145,7 +99,6 @@ 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)) */ if (pthread_join(array[i], &exit_value)) sys_error("pthread_join failed", __LINE__); @@ -154,28 +107,17 @@ int main(int argc, char **argv) (long)exit_value); rc += (long)exit_value; } - free(array); - free(arg); - /* One or more of the threads did not complete sucessfully! */ if (rc != 0) { printf("test failed!\n"); exit(-1); } - /* Program completed successfully... */ printf("\tThread [main] All threads completed successfully...\n"); exit(0); } -/*-------------------------------------------------------------------+ -| thread () | -| ================================================================== | -| | -| Function: ... | -| | -+-------------------------------------------------------------------*/ -void *thread(int *parm) +static void *thread(int *parm) { int num = *parm; unsigned long cksum = 0; @@ -183,7 +125,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 +135,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 +157,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 +186,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 +219,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 +237,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://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