[LTP] [Committed 1/3] network/nfsstress: move test to nfs_stress and name it as nfs05

Alexey Kodanev alexey.kodanev@oracle.com
Wed Oct 14 11:27:44 CEST 2015


Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
---
 testcases/network/.gitignore                       |    2 +-
 testcases/network/nfs/nfs_stress/Makefile          |    4 +-
 testcases/network/nfs/nfs_stress/nfs05             |  207 +++++
 testcases/network/nfs/nfs_stress/nfs05_make_tree.c |  796 ++++++++++++++++++++
 testcases/network/nfs/nfsstress/Makefile           |   31 -
 testcases/network/nfs/nfsstress/make_tree.c        |  796 --------------------
 testcases/network/nfs/nfsstress/nfsstress          |  207 -----
 7 files changed, 1007 insertions(+), 1036 deletions(-)
 create mode 100755 testcases/network/nfs/nfs_stress/nfs05
 create mode 100644 testcases/network/nfs/nfs_stress/nfs05_make_tree.c
 delete mode 100644 testcases/network/nfs/nfsstress/Makefile
 delete mode 100644 testcases/network/nfs/nfsstress/make_tree.c
 delete mode 100755 testcases/network/nfs/nfsstress/nfsstress

diff --git a/testcases/network/.gitignore b/testcases/network/.gitignore
index 95fdbe9..e349520 100644
--- a/testcases/network/.gitignore
+++ b/testcases/network/.gitignore
@@ -19,11 +19,11 @@
 /multicast/mc_opts/mc_verify_opts_error
 /nfs/nfs_stress/nfs01_open_files
 /nfs/nfs_stress/nfs04_create_file
+/nfs/nfs_stress/nfs05_make_tree
 /nfs/nfs_fsstress/fsstress
 /nfs/nfslock01/nfs_flock
 /nfs/nfslock01/nfs_flock_dgen
 /nfs/nfslock01/nfs_flock_frk
-/nfs/nfsstress/make_tree
 /nfsv4/acl/acl1
 /nfsv4/locks/locktests
 /rpc/basic_tests/rpc01/rpc1
diff --git a/testcases/network/nfs/nfs_stress/Makefile b/testcases/network/nfs/nfs_stress/Makefile
index 2b5242c..0e6aebc 100644
--- a/testcases/network/nfs/nfs_stress/Makefile
+++ b/testcases/network/nfs/nfs_stress/Makefile
@@ -19,11 +19,13 @@ top_srcdir		?= ../../../..
 include $(top_srcdir)/include/mk/env_pre.mk
 
 nfs04_create_file: CPPFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
+nfs05_make_tree: LDLIBS += -lpthread
 
 INSTALL_TARGETS		:= nfs_lib.sh \
 			   nfs01 \
 			   nfs02 \
 			   nfs03 \
-			   nfs04
+			   nfs04 \
+			   nfs05
 
 include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/network/nfs/nfs_stress/nfs05 b/testcases/network/nfs/nfs_stress/nfs05
new file mode 100755
index 0000000..6e337d9
--- /dev/null
+++ b/testcases/network/nfs/nfs_stress/nfs05
@@ -0,0 +1,207 @@
+#! /bin/sh
+#
+#   Copyright (c) International Business Machines  Corp., 2001
+#
+#   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
+#   the Free Software Foundation; either version 2 of the License, or
+#   (at your option) any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY;  without even the implie; warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+#   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
+#
+#
+#
+#  FILE   : nfsstress
+#
+#  DESCRIPTION: This script sets up the NFS directories in the remote machine
+#               and invokes the program make_tree with parameters.
+#
+#  SETUP: The home directory of root on the machine exported as "RHOST"
+#         MUST have a ".rhosts" file with the hostname of the machine
+#         where the test is executed.
+#
+#
+#  HISTORY:
+#    11/1/01 Robbie Williamson (robbiew@us.ibm.com)
+#      -Created
+#
+#***********************************************************************
+
+#Uncomment line below for debug output.
+#trace_logic=${trace_logic:-"set -x"}
+
+$trace_logic
+
+#-----------------------------------------------------------------------
+# Initialize local variables
+#-----------------------------------------------------------------------
+TC=${TC:=nfsstress}
+TCbin=${TCbin:=$LTPROOT/testcases/bin}
+TCsrc=${TCsrc:=$TCbin}
+TCtmp=${TCtmp:=$TMPDIR/$TC$$}
+RHOST=${RHOST:=`hostname|awk {'print $1'}`}
+export TCID=$TC
+export TST_TOTAL=1
+export TST_COUNT=1
+
+# Setting the NFS to version 3 with UDP by default
+PID=$$
+VERSION=${VERSION:=3}
+SOCKET_TYPE=${SOCKET_TYPE:=udp}
+TESTDIR=${TESTDIR:=/tmp/$TC$PID.testdir}
+NFS_TYPE=${NFS_TYPE:=nfs}
+
+# If CLEANUP is not set; set it to "ON"
+CLEANUP=${CLEANUP:="ON"}
+
+# If EXECUTABLES is not set; set it to default executables
+EXECUTABLES=${EXECUTABLES:="make_tree"}
+
+DIR_NUM=$1
+FILE_NUM=$2
+THREAD_NUM=$3
+
+DIR_NUM=${DIR_NUM:=100}
+FILE_NUM=${FILE_NUM:=100}
+THREAD_NUM=${THREAD_NUM:=8}
+
+#=============================================================================
+# FUNCTION NAME:        setup_testcase
+#
+# FUNCTION DESCRIPTION: Perform the setup function for the testcase.
+#
+# PARAMETERS:   	None.
+#
+# RETURNS:      	None.
+#=============================================================================
+
+setup_testcase()
+{
+$trace_logic
+
+
+    echo ""
+    echo "Test Options:"
+    echo " VERSION: $VERSION"
+    echo " RHOST: $RHOST"
+    echo " SOCKET_TYPE: $SOCKET_TYPE"
+    echo " NFS_TYPE: $NFS_TYPE"
+    echo ""
+    echo "Test Parameters:"
+    echo " Number of Directories: $DIR_NUM"
+    echo " Number of Files per Directory: $FILE_NUM"
+    echo " Number of Threads: $THREAD_NUM"
+    echo ""
+
+    if [ "x$NFS_TYPE" != "xnfs4" ]; then
+        OPTS=${OPTS:="-o vers=$VERSION,proto=$SOCKET_TYPE "}
+    fi
+    REMOTE_DIR=${RHOST}:$TESTDIR
+    LOCAL_DIR=$TCtmp/${RHOST}
+    mkdir -p $TCtmp || end_testcase "Could not create $TCtmp"
+    chmod 777 $TCtmp
+
+    echo "Setting up remote machine: $RHOST"
+    rsh -n $RHOST "mkdir $TESTDIR"
+    [ $? = 0 ] || end_testcase "Could not create remote directory"
+
+   if [ "x$NFS_TYPE" = "xnfs4" ]; then
+        rsh -n $RHOST "mkdir -p /export$TESTDIR"
+        [ $? = 0 ] || end_testcase "Could not create /export$TESTDIR on server"
+        rsh -n $RHOST "mount --bind $TESTDIR /export$TESTDIR"
+        [ $? = 0 ] || end_testcase "Could not bind $TESTDIR to export on server"
+        rsh -n $RHOST "/usr/sbin/exportfs -o no_root_squash,rw,nohide,insecure,no_subtree_check *:$TESTDIR"
+        [ $? = 0 ] || end_testcase "Could not export remote directory"
+    else
+        rsh -n $RHOST "/usr/sbin/exportfs -i -o no_root_squash,rw *:$TESTDIR"
+        [ $? = 0 ] || end_testcase "Could not export remote directory"
+    fi
+
+    echo "Mounting NFS filesystem $REMOTE_DIR on $TCtmp with options '$OPTS'"
+    mount -t $NFS_TYPE $OPTS $REMOTE_DIR $TCtmp || end_testcase "Cannot mount $TCtmp"
+    [ $? = 0 ] || end_testcase "Could not mount $REMOTE_DIR"
+
+    cd $TCtmp
+    echo "Removing old and create new directories"
+    [ -d $LOCAL_DIR ] && rm -rf $LOCAL_DIR
+    [ -d $LOCAL_DIR ] || { \
+	mkdir -p $LOCAL_DIR || end_testcase "Could not create $LOCAL_DIR"
+	chmod 777 $LOCAL_DIR
+        cp $TCsrc/$EXECUTABLES $LOCAL_DIR || end_testcase "Could not write to mount point"
+    }
+
+}
+
+
+#=============================================================================
+# FUNCTION NAME:        do_test
+#
+# FUNCTION DESCRIPTION: Perform the test
+#
+# PARAMETERS:   	None.
+#
+# RETURNS:      	None.
+#=============================================================================
+do_test()
+{
+$trace_logic
+    EXEC=${EXEC:=$EXECUTABLES -d $DIR_NUM -f $FILE_NUM -t $THREAD_NUM}
+    cd $LOCAL_DIR
+    echo "${LOCAL_DIR}/${EXEC} Starting"
+    ./$EXEC &
+    wait $!
+    retval=$?
+    echo "${LOCAL_DIR}/${EXEC} Finished"
+
+    if [ "$retval" != 0 ]; then
+      end_testcase "Errors have resulted from this test: $EXECUTABLES returned $retval."
+    fi
+
+    cd /
+}
+
+
+#=============================================================================
+# FUNCTION NAME:        end_testcase
+#
+# FUNCTION DESCRIPTION: Clean up
+#
+# PARAMETERS:   	None.
+#
+# RETURNS:      	None.
+#=============================================================================
+end_testcase()
+{
+$trace_logic
+    if [ "$CLEANUP" = "ON" ]; then
+	cd \
+
+	echo "Cleaning up testcase"
+	rm -rf $LOCAL_DIR || echo "Cannot remove $LOCAL_DIR"
+	sleep 2
+        /bin/umount $TCtmp || echo "Cannot umount $TCtmp"
+	sleep 2
+	rm -rf $TCtmp || echo "Cannot remove $TCtmp"
+        rsh -n $RHOST "/usr/sbin/exportfs -u *:$TESTDIR"
+		 rsh -n $RHOST "rm -rf $TESTDIR"
+    fi
+
+    [ $# = 0 ] && { tst_resm TPASS "Test Successful"; exit 0; }
+    tst_resm TFAIL "Test Failed: $@"
+    exit 1
+}
+
+#=============================================================================
+# MAIN PROCEDURE
+#=============================================================================
+
+setup_testcase
+do_test
+end_testcase
diff --git a/testcases/network/nfs/nfs_stress/nfs05_make_tree.c b/testcases/network/nfs/nfs_stress/nfs05_make_tree.c
new file mode 100644
index 0000000..4163988
--- /dev/null
+++ b/testcases/network/nfs/nfs_stress/nfs05_make_tree.c
@@ -0,0 +1,796 @@
+/******************************************************************************/
+/*									      */
+/* Copyright (c) International Business Machines  Corp., 2001		      */
+/*									      */
+/* 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       */
+/* the Free Software Foundation; either version 2 of the License, or          */
+/* (at your option) any later version.					      */
+/*									      */
+/* This program is distributed in the hope that it will be useful,	      */
+/* but WITHOUT ANY WARRANTY;  without even the implied warranty of	      */
+/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See	              */
+/* 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    */
+/*									      */
+/******************************************************************************/
+
+/******************************************************************************/
+/*                                                                            */
+/* History:     Oct - 10 - 2001 Created - Manoj Iyer, IBM Austin TX.          */
+/*                               email:manjo@austin.ibm.com                   */
+/*					- create a directory tree that is     */
+/*				unique to each process. The base directory    */
+/*				looks like hostname.<pid of the process>      */
+/*				the subdirectories will be <pid>.0 <pid.1> etc*/
+/*				eg:					      */
+/*				    hostname.1234			      */
+/*					       |_ 1234.0	              */
+/*					               |_ 1234.1              */
+/*					                      |_1234.2        */
+/*								    |....     */
+/*				hostname -  hostname of the machine           */
+/*			        1234     -  pid of the current process.       */
+/*			        Each of these directories are populated with  */
+/*				N number of ".c" files and a makefile that can*/
+/*				compile the ".c" files and also initiate      */
+/*				compile of ".c" files in the subdirectories   */
+/*				under it.			              */
+/*                                                                            */
+/*		Oct - 11 - 2001 Modified 				      */
+/*				- fixed a bug in the makefiles, the last make-*/
+/*				  file was expecting subdirectories. Added    */
+/*				  code to generate a different makefile for   */
+/*				  the last subdirectory.		      */
+/*				- Added logic to first compile all the c files*/
+/*				  and upon completion remove them.            */
+/*			        - Added multithreading, arguments handling.   */
+/*				  By default the program will generate 8      */
+/*				  threads, each creating by default 100 deep  */
+/*				  directory tree each containing default 100  */
+/*			          ".c" files and one makefile.                */
+/*			        - Added usage message.                        */
+/*								              */
+/*		Oct - 12 - 2001 Modified			              */
+/*				- Added logic to print missing arguments to   */
+/*				  options.                                    */
+/*                                                                            */
+/*		Oct - 15 - 2001 Modified			              */
+/*				- Added logic to remove the files, makefiles  */
+/*				  and subdirectories that were created.       */
+/*			        - Added logic to print debug messages.        */
+/*								              */
+/*		Oct - 16 - 2001 Modified		                      */
+/*				- Added sync() calls to commit changes.       */
+/*				- Fixed bug. pthread_join() returns 0 when    */
+/*			          pthread_join fails, if the thread function  */
+/*				  fails pthread_join() will put the exit value*/
+/*			          of the thread function in the thread_return */
+/*				  output argument.			      */
+/*				- Debugging function crte_mk_rm fails to      */
+/*				  create fies, problem appears only in multi- */
+/*				  threaded case.                              */
+/*								              */
+/*		Oct - 17 - 2001 Checked in		                      */
+/*				- GPL statement was added and the initial ver */
+/*			        - checked into CVS.		              */
+/*			        - note: this version works only if it is run  */
+/*				  single threaded, when its run multithreaded */
+/*		                  random thread will fail on open() sys call  */
+/*				  problem currently under investigation.      */
+/*                                                                            */
+/*		Oct - 20 - 2001 Modified				      */
+/*				- fixed a whole bunch of problems.            */
+/*			        - created function init_compile. Apparently   */
+/*				  this code works!!.                          */
+/*			        - removed system() system call that was doing */
+/*				  make and make clean. init_compile() replaces*/
+/*				  this piece of code.                         */
+/*				- on supplying the full pathname to unlink()  */
+/*				  solved most of the problems with rm_file_mk */
+/*			          function.                                   */
+/*				- reset the default vaulues for MAXT = 8      */
+/*				  MAXD = 100 and MAXF = 100.                  */
+/*				  ie. maximum number of threads = 8           */
+/*				      directory depth (num of sub dirs) = 100 */
+/*				      numeber of .c fils in each sub dir = 100*/
+/*				- finally program is now in working state.    */
+/*                                                                            */
+/*		Nov - 01 - 2001 Modified.				      */
+/*				- fixed usage message default MAXT is 8 not 1 */
+/*				- fixed make to compile the files silently    */
+/*									      */
+/*		Nov - 19 - 2001 Modified.				      */
+/*				- changed th_status in function main() from   */
+/*				  dynamic variable to static array.           */
+/*									      */
+/* File:        make_tree.c                                                   */
+/*                                                                            */
+/* Description:	This program is designed stress the NFS implimentation.       */
+/* 		Many bugs were uncovered in the AIX operating system          */
+/*		implimentation of NFS when AIX kernel was built over NFS.     */
+/*		Source directory on a remote machine (one server many clients)*/
+/*		NFS-mounted on to a directory on a local machine from which   */
+/*		the kernel build was initiated. Apparently many defects/bugs  */
+/* 		were uncovered when multiple users tried to build the kernel  */
+/* 		by NFS mounting the kernel source from a remote machine and   */
+/* 		tried to build the kernel on a local machine. AIX build envi- */
+/*		ronment is set up to create the object files and executable   */
+/*		on the local machine. 					      */
+/* 		This testcase will try to recreate such a senario.            */
+/*		Spawn N number of threads. Each thread does the following.    */
+/*		* Create a directory tree.                                    */
+/*		* Populate it with ".c" files and makefiles.                  */
+/*		* initate a build. Executable will print hello world when exed*/
+/*		* clean up all the executables that were created.             */
+/*		* recurssively remove each subdir and its contents.           */
+/*		The test is aimed at stressing the NFS client and server.     */
+/*				    hostname.1234			      */
+/*                                             |                              */
+/*				               | - 1234.0.0.c                 */
+/*					       | - 1234.0.1.c                 */
+/*                                             | - ..........                 */
+/*					       | - makefile                   */
+/*                                             |                              */
+/*					       |_ 1234.0	              */
+/*                                                    |                       */
+/*				                      | - 1234.1.0.c          */
+/*					              | - 1234.1.1.c          */
+/*                                                    | - ..........          */
+/*					              | - makefile            */
+/*                                                    |                       */
+/*					              |_ 1234.1               */
+/*                                                           |                */
+/*				                             | - 1234.2.0.c   */
+/*					                     | - 1234.2.1.c   */
+/*                                                           | - ..........   */
+/*					                     | - makefile     */
+/*                                                           |                */
+/*					                     |_1234.2         */
+/*								    |....     */
+/*                                                                            */
+/* Setup:	- on the server side:			                      */
+/*		  * create a directory /nfs_test 		              */
+/*		  * make an entry in /etc/exports file like this...           */
+/*		    "/nfs_test *(rw,no_root_squash)"		              */
+/*		  * run command "exportfs -a"		                      */
+/*	        - on client side:			                      */
+/*		  * create a directory say for eg: /nfs_cli                   */
+/*		  * mount -t nfs servername:/nfs_test /nfs_cli                */
+/*		  * set up the tescase in /nfs_cli directory		      */
+/*		- I reccomend that you have atleast 8 client machines running */
+/*		   this test, linux has 8 NFSD's running by default, you might*/
+/*		   have to increase it as per your requirement.               */
+/*		                                                              */
+/* Note:	- assumed that NFS services are installed and configured      */
+/*		- you have atleast 2 machines to act as client and server     */
+/*		  (you can have muiltiple client machines and one server)     */
+/*		- large amount of disk space, this depends on the number of   */
+/*		  of clients you will have, if you have only one client, I    */
+/*		  reccomend that the server have atleast 4 Giga bytes of      */
+/*		  disk space (paranoid!).			              */
+/*									      */
+/******************************************************************************/
+
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <sys/mount.h>
+#include <linux/limits.h>
+#include <errno.h>
+#include <linux/unistd.h>
+
+#define gettid() syscall(__NR_gettid)
+
+#ifdef DEBUG
+#define dprt(fmt, args...)	printf(fmt, ## args)
+#else
+#define dprt(fmt, args...)
+#endif
+
+#define MAKE_EXE	1	/* initate a make                             */
+#define MAKE_CLEAN	0	/* initate a make clean                       */
+
+#define PTHREAD_EXIT(val)    do {\
+			exit_val = val; \
+                        dprt("pid[%d]: exiting with %d\n", gettid(),exit_val); \
+			pthread_exit((void *)exit_val); \
+				} while (0)
+
+#define OPT_MISSING(prog, opt)   do{\
+			       fprintf(stderr, "%s: option -%c ", prog, opt); \
+                               fprintf(stderr, "requires an argument\n"); \
+                               usage(prog); \
+                                   } while (0)
+
+#define MAXD	100		/* default number of directories to create.           */
+#define MAXF	100		/* default number of files to create.                 */
+#define MAXT	8		/* default number of threads to create.               */
+
+/******************************************************************************/
+/*								 	      */
+/* Function:	usage							      */
+/*									      */
+/* Description:	Print the usage message.				      */
+/*									      */
+/* Return:	exits with -1						      */
+/*									      */
+/******************************************************************************/
+static void usage(char *progname)
+{				/* name of this program                       */
+	fprintf(stderr,
+		"Usage: %s -d NUMDIR -f NUMFILES -h -t NUMTHRD\n"
+		"\t -d Number of subdirectories to generate:   Default: 100\n"
+		"\t -f Number of c files in each subdirectory: Default: 100\n"
+		"\t -h Help!\n"
+		"\t -t Number of threads to generate:          Default: 8\n",
+		progname);
+	exit(-1);
+}
+
+/******************************************************************************/
+/*								 	      */
+/* Function:	init_compile						      */
+/*									      */
+/* Description:	This function compiles the .c files and removes the exeutables*/
+/*		This function does the same function as the system() system   */
+/*		call, the code is available in the system() man page. When    */
+/*		called with the parameter MAKE_EXE it will initiate make in   */
+/*		the first directory created, the makefile is designed to build*/
+/*		recursively all the files in the subdirectories below.        */
+/*		When called with the MAKE_CLEAN parameter it will remove the  */
+/*		executables that were created design is similar to the case   */
+/*		were it initiates a make.                                     */
+/*									      */
+/* Return:	exits with 1 on error, 0 on success                           */
+/*									      */
+/******************************************************************************/
+static int init_compile(int what_todo,	/* do a compile or clean             */
+			char *base_dir,	/* base directory of the test        */
+			char *hname)
+{				/* hostname of the machine           */
+	int status;		/* return status of execve process            */
+	pid_t pid;		/* pid of the process that does compile       */
+	char *dirname;		/* location where compile is initated         */
+	char *command;		/* make or make clean command.                */
+
+	if ((dirname = malloc(sizeof(char) * 2048)) == NULL) {	/* just paranoid */
+		perror("init_compile(): dirname malloc()");
+		return 1;
+	}
+
+	if ((command = malloc(sizeof(char) * 1024)) == NULL) {	/* just paranoid */
+		perror("init_compile(): dirname malloc()");
+		return 1;
+	}
+
+	what_todo ? sprintf(command, "make -s") : sprintf(command,
+							  "make -s clean");
+
+	sprintf(dirname, "%s/%s.%ld", base_dir, hname, gettid());
+
+	if (chdir(dirname) == -1) {
+		dprt("pid[%d]: init_compile(): dir name = %s\n", gettid(),
+		     dirname);
+		perror("init_compile() chdir()");
+		free(dirname);
+		return 1;
+	}
+
+	dprt("pid[%d]: init_compile(): command = %s\n", gettid(), command);
+
+	if ((pid = fork()) == -1) {
+		perror("init_compile(): fork()");
+		return 1;
+	}
+	if (!pid) {
+		char *argv[4];
+
+		argv[0] = "/bin/sh";
+		argv[1] = "-c";
+		argv[2] = command;
+		argv[3] = 0;
+
+		if (execv("/bin/sh", argv) == -1) {
+			perror("init_compile(): execv()");
+			return 1;
+		}
+	}
+	do {
+		if (waitpid(pid, &status, 0) == -1) {
+			if (errno != EINTR) {
+				fprintf(stderr,
+					"init_compile(): waitpid() failed\n");
+				return 1;
+			}
+		} else {
+			if (chdir(base_dir) == -1) {
+				dprt("pid[%d]: init_compile(): dir = %s\n",
+				     gettid(), dirname);
+				perror("init_compile(): chdir()");
+				return 1;
+			}
+
+			dprt("pid[%d]: init_compile(): status = %d\n",
+			     gettid(), status);
+			dprt("we are here %d\n", __LINE__);
+			return status;
+		}
+
+	} while (1);
+}
+
+/******************************************************************************/
+/*								 	      */
+/* Function:	rm_file_dir						      */
+/*									      */
+/* Description: This function removes the .c files makefiles and directories. */
+/*		First removes the files in the files in the last directory    */
+/*		first then removes the last directory, then cycles through    */
+/*		each subdirectory and does the same.			      */
+/*									      */
+/* Return:	exits with 1 on error, 0 on success      		      */
+/*									      */
+/******************************************************************************/
+static int rm_file_dir(int numsdir,	/* how many subdirs to remove         */
+		       int numfiles,	/* number of files to remove per dir  */
+		       char *hname,	/* hostname of the client machine     */
+		       char *base_dir)
+{				/* directory where the test is located */
+	int filecnt;		/* index to the num of files to remove */
+	int dircnt;		/* index into directory tree          */
+	int sindex = numsdir;	/* num subdirectory tree to remove    */
+	char *dirname;		/* name of the directory to chdir()   */
+	char *tmpdirname;	/* temp name for directory, for swap  */
+	char *filename;		/* name of the cfile to remove        */
+	char *subdir;		/* name of the sub dir to remove      */
+
+	if ((dirname = malloc(sizeof(char) * 2048)) == NULL) {	/* just paranoid */
+		perror("crte_mk_rm(): dirname malloc()");
+		return 1;
+	}
+
+	if ((tmpdirname = malloc(sizeof(char) * 2048)) == NULL) {	/* just paranoid */
+		perror("crte_mk_rm(): tmpdirname malloc()");
+		return 1;
+	}
+
+	if ((filename = malloc(sizeof(char) * 2048)) == NULL) {	/* just paranoid */
+		perror("crte_mk_rm(): filename malloc()");
+		return 1;
+	}
+
+	if ((subdir = malloc(sizeof(char) * 2048)) == NULL) {	/* just paranoid */
+		perror("crte_mk_rm(): subdir malloc()");
+		return 1;
+	}
+
+	dprt("pid[%d]: base directory: %s\n", gettid(), base_dir);
+	while (sindex) {
+		/* get the name of the last directory created. */
+		for (dircnt = 0; dircnt < sindex; dircnt++) {
+			if (dircnt == 0)
+				sprintf(dirname, "%s/%s.%ld", base_dir, hname,
+					gettid());
+			else {
+				sprintf(tmpdirname, "%s/%ld.%d", dirname,
+					gettid(), dircnt);
+				sprintf(dirname, "%s", tmpdirname);
+			}
+			sync();
+		}
+
+		dprt("pid[%d]: cd'ing to last created dir: %s\n", gettid(),
+		     dirname);
+
+		sindex--;
+
+		/* remove all the ".c" files and makefile in this directory */
+		for (filecnt = 0; filecnt < numfiles; filecnt++) {
+			sprintf(filename, "%s/%ld.%d.%d.c", dirname, gettid(),
+				dircnt - 1, filecnt);
+			dprt("pid[%d]: removing file: %s\n", gettid(),
+			     filename);
+
+			if (unlink(filename)) {
+				dprt("pid[%d]: failed removing file: %s\n",
+				     gettid(), filename);
+				perror("rm_file_dir(): unlink()");
+				free(tmpdirname);
+				free(dirname);
+				free(filename);
+				free(subdir);
+				return 1;
+			}
+			sync();
+		}
+
+		sprintf(filename, "%s/%s", dirname, "makefile");
+		dprt("pid[%d]: removing %s\n", gettid(), filename);
+		if (unlink(filename)) {
+			perror
+			    ("rm_file_dir() cound not remove makefile unlink()");
+			free(tmpdirname);
+			free(dirname);
+			free(filename);
+			free(subdir);
+			return 1;
+		}
+		sync();
+
+		/* the last directory does not have any more sub directories */
+		/* nothing to remove.                                    */
+		dprt("pid[%d]: in directory count(dircnt): %d\n", gettid(),
+		     dircnt);
+		dprt("pid[%d]: last directory(numsdir): %d\n", gettid(),
+		     numsdir);
+		if (dircnt < numsdir) {
+			/* remove the sub directory */
+			sprintf(subdir, "%s/%ld.%d", dirname, gettid(), dircnt);
+			dprt("pid[%d]: removing subdirectory: %s\n", gettid(),
+			     subdir);
+			if (rmdir(subdir) == -1) {
+				perror("rm_file_dir() rmdir()");
+				free(tmpdirname);
+				free(dirname);
+				free(filename);
+				free(subdir);
+				return 1;
+			}
+			sync();
+		}
+	}
+
+	free(tmpdirname);
+	free(dirname);
+	free(filename);
+	free(subdir);
+	return 0;
+}
+
+/******************************************************************************/
+/*								 	      */
+/* Function:	crte_mk_rm						      */
+/*									      */
+/* Description:	This function gets executed by each thread that is created.   */
+/*		crte_mk_rm() created the directory tree, polpulates it with   */
+/*		".c" files and a makefile that will compile the ".c" files and*/
+/*		initiate the makefile in the subdirectory under it. Once the  */
+/*		c source files are compiled it will remove them.              */
+/*									      */
+/* Input:	The argument pointer contains the following.                  */
+/*		arg[0] - number of directories to create, depth of the tree.  */
+/*		arg[1] - number of ".c" files to create in each dir branch.   */
+/*									      */
+/* Return:	-1 on failure						      */
+/*		 0 on success					              */
+/*									      */
+/******************************************************************************/
+static void *crte_mk_rm(void *args)
+{
+	int dircnt;		/* index to the number of subdirectories      */
+	int fd;			/* file discriptor of the files genetated     */
+	int filecnt;		/* index to the number of ".c" files created  */
+	int numchar[2];		/* number of characters written to buffer     */
+	char *dirname;		/* name of the directory/idirectory tree      */
+	char *tmpdirname;	/* name of a temporary directory, for swaping */
+	char *cfilename;	/* name of the ".c" file created              */
+	char *mkfilename;	/* name of the makefile - which is "makefile" */
+	char *hostname;		/* hostname of the client machine             */
+	char *prog_buf;		/* buffer containing contents of the ".c" file */
+	char *make_buf;		/* buffer the contents of the makefile        */
+	char *pwd;		/* contains the current working directory     */
+	long *locargptr =	/* local pointer to arguments                 */
+	    (long *)args;
+	volatile int exit_val = 0;	/* exit value of the pthreads                 */
+
+	if ((dirname = malloc(sizeof(char) * 2048)) == NULL) {	/* just paranoid */
+		perror("crte_mk_rm(): dirname malloc()");
+		PTHREAD_EXIT(-1);
+	}
+
+	if ((tmpdirname = malloc(sizeof(char) * 2048)) == NULL) {
+		perror("crte_mk_rm(): tmpdirname malloc()");
+		PTHREAD_EXIT(-1);
+	}
+
+	if ((cfilename = malloc(sizeof(char) * 2048)) == NULL) {
+		perror("crte_mk_rm(): cfilename malloc()");
+		PTHREAD_EXIT(-1);
+	}
+
+	if ((mkfilename = malloc(sizeof(char) * 2048)) == NULL) {
+		perror("crte_mk_rm(): mkfilename malloc()");
+		PTHREAD_EXIT(-1);
+	}
+
+	if ((prog_buf = malloc(sizeof(char) * 4096)) == NULL) {
+		perror("crte_mk_rm(): prog_buf malloc()");
+		PTHREAD_EXIT(-1);
+	}
+
+	if ((pwd = malloc(PATH_MAX)) == NULL) {
+		perror("crte_mk_rm(): pwd malloc()");
+		PTHREAD_EXIT(-1);
+	}
+
+	if ((hostname = malloc(sizeof(char) * 1024)) == NULL) {
+		perror("crte_mk_rm(): hostname malloc()");
+		PTHREAD_EXIT(-1);
+	}
+
+	if (gethostname(hostname, 255) == -1) {
+		perror("crte_mk_rm(): gethostname()");
+		PTHREAD_EXIT(-1);
+	}
+	if (!getcwd(pwd, PATH_MAX)) {
+		perror("crte_mk_rm(): getcwd()");
+		PTHREAD_EXIT(-1);
+	}
+
+	numchar[0] = sprintf(prog_buf,
+			     "main()\n{\n\t printf(\"hello world\");\n}\n");
+
+	for (dircnt = 0; dircnt < (int)locargptr[0]; dircnt++) {
+		/* First create the base directory, then create the subdirectories   */
+		if (dircnt == 0)
+			sprintf(dirname, "%s.%ld", hostname, gettid());
+		else {
+			sprintf(tmpdirname, "%s/%ld.%d", dirname, gettid(),
+				dircnt);
+			sprintf(dirname, "%s", tmpdirname);
+		}
+		sync();
+
+		dprt("pid[%d] creating directory: %s\n", gettid(), dirname);
+		if (mkdir(dirname, 0777) == -1) {
+			perror("crte_mk_rm(): mkdir()");
+			PTHREAD_EXIT(-1);
+		}
+	}
+
+	sync();
+	usleep(10);
+	for (dircnt = 0; dircnt < (int)locargptr[0]; dircnt++) {
+		if (dircnt == 0)
+			sprintf(dirname, "%s/%s.%ld", pwd, hostname, gettid());
+		else {
+			sprintf(tmpdirname, "%s/%ld.%d", dirname, gettid(),
+				dircnt);
+			sprintf(dirname, "%s", tmpdirname);
+		}
+		sync();
+		if ((make_buf = malloc(sizeof(char) * 4096)) == NULL) {
+			perror("crte_mk_rm(): make_buf malloc()");
+			PTHREAD_EXIT(-1);
+		}
+		sprintf(mkfilename, "%s/makefile", dirname);
+		{
+			/* HACK! I could not write "%.c" to the makefile */
+			/* there is probably a correct way to do it      */
+			char *dotc = malloc(10);
+			dotc = ".c";
+			sync();
+			usleep(10);
+			if (dircnt == (locargptr[0] - 1)) {
+				numchar[1] = sprintf(make_buf,
+						     "CFLAGS := -O -w -g\n"
+						     "SUBDIRS = %ld.%d\n"
+						     "SRCS=$(wildcard *.c)\n"
+						     "TARGETS=$(patsubst %%%s,\%%,$(SRCS))\n"
+						     "all:\t $(TARGETS)\n"
+						     "clean:\n"
+						     "\trm -f $(TARGETS)\n",
+						     gettid(), dircnt + 1,
+						     dotc);
+			} else {
+				numchar[1] = sprintf(make_buf,
+						     "CFLAGS := -O -w -g\n"
+						     "SUBDIRS = %ld.%d\n"
+						     "SRCS=$(wildcard *.c)\n"
+						     "TARGETS=$(patsubst %%%s,\%%,$(SRCS))\n\n\n"
+						     "all:\t $(TARGETS)\n"
+						     "\t@for i in $(SUBDIRS); do $(MAKE) -C $$i ; done\n\n"
+						     "clean:\n"
+						     "\trm -f $(TARGETS)\n"
+						     "\t@for i in $(SUBDIRS); do $(MAKE) -C $$i clean ; done\n",
+						     gettid(), dircnt + 1,
+						     dotc);
+			}
+		}
+
+		sync();
+		usleep(10);
+		dprt("pid[%d]: creating in dir: %s\n", gettid(), mkfilename);
+		/* create the makefile, complies .c files and initiates make in   */
+		/* subdirectories.                                                */
+		if ((fd = open(mkfilename, O_CREAT | O_RDWR,
+			       S_IRWXU | S_IRWXG | S_IRWXO)) == -1) {
+			dprt(" pid[%d]: failed to create makefile\n", gettid());
+			dprt("pid[%d]: failed in directory %s\n", gettid(),
+			     dirname);
+			perror("crte_mk_rm() failed creating makefile: open()");
+			PTHREAD_EXIT(-1);
+		} else {
+			sync();
+			if (write(fd, make_buf, numchar[1]) == -1) {
+				perror("crte_mk_rm(): write()");
+				PTHREAD_EXIT(-1);
+			}
+
+			free(make_buf);
+
+			if (close(fd) == -1) {
+				perror("crte_mk_rm(): close()");
+				PTHREAD_EXIT(-1);
+			}
+		}
+	}
+
+	for (dircnt = 0; dircnt < (int)locargptr[0]; dircnt++) {
+		if (dircnt == 0)
+			sprintf(dirname, "%s/%s.%ld", pwd, hostname, gettid());
+		else {
+			sprintf(tmpdirname, "%s/%ld.%d", dirname, gettid(),
+				dircnt);
+			sprintf(dirname, "%s", tmpdirname);
+		}
+		sync();
+		/* In each directory create N ".c" files and a makefile. */
+		for (filecnt = 0; filecnt < (int)locargptr[1]; filecnt++) {
+			sprintf(cfilename, "%s/%ld.%d.%d.c", dirname, gettid(),
+				dircnt, filecnt);
+			dprt("pid[%d]: creating file: %s\n", gettid(),
+			     cfilename);
+			if ((fd =
+			     open(cfilename, O_CREAT | O_RDWR,
+				  S_IRWXU | S_IRWXG | S_IRWXO)) == -1) {
+				fprintf(stderr,
+					"open() failed to create file %s\n",
+					cfilename);
+				perror
+				    ("crte_mk_rm(): failed creating .c files: open()");
+				PTHREAD_EXIT(-1);
+			} else {
+				sync();
+				/* write the code, this program prints hello world */
+				if (write(fd, prog_buf, numchar[0]) == -1) {
+					perror("crte_mk_rm(): write()");
+					PTHREAD_EXIT(-1);
+				}
+
+				fsync(fd);
+
+				if (close(fd) == -1) {
+					perror("crte_mk_rm(): close()");
+					PTHREAD_EXIT(-1);
+				}
+			}
+
+		}
+	}
+
+	if (init_compile(MAKE_EXE, pwd, hostname) == 1) {
+		fprintf(stderr, "init_compile() make failed\n");
+		PTHREAD_EXIT(-1);
+	} else {
+		if (init_compile(MAKE_CLEAN, pwd, hostname) == 1) {
+			fprintf(stderr, "init_compile() make clean failed\n");
+			PTHREAD_EXIT(-1);
+		}
+	}
+
+	sync();
+	/* remove all the files makefiles and subdirecotries  */
+	if (rm_file_dir((int)locargptr[0], (int)locargptr[1], hostname, pwd)) {
+		fprintf(stderr, "crte_mk_rm(): rm_file_dir() failed\n");
+		PTHREAD_EXIT(-1);
+	}
+	/* if it made it this far exit with success */
+	PTHREAD_EXIT(0);
+}
+
+/******************************************************************************/
+/*								 	      */
+/* Function:	main							      */
+/*									      */
+/* Description:	This is the entry point to the program. This function will    */
+/*		parse the input arguments and set the values accordingly. If  */
+/*		no arguments (or desired) are provided default values are used*/
+/*		refer the usage function for the arguments that this program  */
+/*		takes. It also creates the threads which do most of the dirty */
+/*		work. If the threads exits with a value '0' the program exits */
+/*		with success '0' else it exits with failure '-1'.             */
+/*									      */
+/* Return:	-1 on failure						      */
+/*		 0 on success						      */
+/*									      */
+/******************************************************************************/
+int main(int argc,		/* number of input parameters                 */
+	 char **argv)
+{				/* pointer to the command line arguments.     */
+	int c;			/* command line options                       */
+	int num_thrd = MAXT;	/* number of threads to create                */
+	int num_dirs = MAXD;	/* number of subdirectories to create         */
+	int num_files = MAXF;	/* number of files in each subdirectory      */
+	int thrd_ndx;		/* index into the array of thread ids         */
+	void *th_status;	/* exit status of LWP's                       */
+	pthread_t thrdid[30];	/* maxinum of 30 threads allowed              */
+	long chld_args[3];	/* arguments to the thread function           */
+	extern int optopt;	/* options to the program                     */
+
+	while ((c = getopt(argc, argv, "d:f:ht:")) != -1) {
+		switch (c) {
+		case 'd':	/* specify how deep the tree needs to grow    */
+			if ((num_dirs = atoi(optarg)) == 0)
+				OPT_MISSING(argv[0], optopt);
+			else if (num_dirs < 0) {
+				fprintf(stdout,
+					"WARNING: bad argument. Using default\n");
+				num_dirs = MAXD;
+			}
+			break;
+		case 'f':	/* how many ".c" files in each directory.     */
+			if ((num_files = atoi(optarg)) == 0)
+				OPT_MISSING(argv[0], optopt);
+			else if (num_files < 0) {
+				fprintf(stdout,
+					"WARNING: bad argument. Using default\n");
+				num_files = MAXF;
+			}
+			break;
+		case 'h':
+			usage(argv[0]);
+			break;
+		case 't':
+			if ((num_thrd = atoi(optarg)) == 0)
+				OPT_MISSING(argv[0], optopt);
+			else if (num_thrd < 0) {
+				fprintf(stdout,
+					"WARNING: bad argument. Using default\n");
+				num_thrd = MAXT;
+			}
+			break;
+		default:
+			usage(argv[0]);
+			break;
+		}
+	}
+
+	chld_args[0] = num_dirs;
+	chld_args[1] = num_files;
+
+	for (thrd_ndx = 0; thrd_ndx < num_thrd; thrd_ndx++) {
+		if (pthread_create
+		    (&thrdid[thrd_ndx], NULL, crte_mk_rm, chld_args)) {
+			perror("crte_mk_rm(): pthread_create()");
+			exit(-1);
+		}
+	}
+
+	sync();
+
+	for (thrd_ndx = 0; thrd_ndx < num_thrd; thrd_ndx++) {
+		if (pthread_join(thrdid[thrd_ndx], &th_status) != 0) {
+			perror("crte_mk_rm(): pthread_join()");
+			exit(-1);
+		} else {
+			dprt("WE ARE HERE %d\n", __LINE__);
+			if (th_status == (void *)-1) {
+				fprintf(stderr,
+					"thread [%ld] - process exited with errors\n",
+					thrdid[thrd_ndx]);
+				exit(-1);
+			}
+		}
+	}
+	return (0);
+}
diff --git a/testcases/network/nfs/nfsstress/Makefile b/testcases/network/nfs/nfsstress/Makefile
deleted file mode 100644
index f24bdb9..0000000
--- a/testcases/network/nfs/nfsstress/Makefile
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-#    network/nfs/nfsstress test suite Makefile.
-#
-#    Copyright (C) 2009, Cisco Systems Inc.
-#
-#    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
-#    the Free Software Foundation; either version 2 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See 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.
-#
-# Garrett Cooper, July 2009
-#
-
-top_srcdir		?= ../../../..
-
-include $(top_srcdir)/include/mk/env_pre.mk
-
-INSTALL_TARGETS		:= nfsstress
-
-LDLIBS 			+= -lpthread
-
-include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/network/nfs/nfsstress/make_tree.c b/testcases/network/nfs/nfsstress/make_tree.c
deleted file mode 100644
index 4163988..0000000
--- a/testcases/network/nfs/nfsstress/make_tree.c
+++ /dev/null
@@ -1,796 +0,0 @@
-/******************************************************************************/
-/*									      */
-/* Copyright (c) International Business Machines  Corp., 2001		      */
-/*									      */
-/* 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       */
-/* the Free Software Foundation; either version 2 of the License, or          */
-/* (at your option) any later version.					      */
-/*									      */
-/* This program is distributed in the hope that it will be useful,	      */
-/* but WITHOUT ANY WARRANTY;  without even the implied warranty of	      */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See	              */
-/* 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    */
-/*									      */
-/******************************************************************************/
-
-/******************************************************************************/
-/*                                                                            */
-/* History:     Oct - 10 - 2001 Created - Manoj Iyer, IBM Austin TX.          */
-/*                               email:manjo@austin.ibm.com                   */
-/*					- create a directory tree that is     */
-/*				unique to each process. The base directory    */
-/*				looks like hostname.<pid of the process>      */
-/*				the subdirectories will be <pid>.0 <pid.1> etc*/
-/*				eg:					      */
-/*				    hostname.1234			      */
-/*					       |_ 1234.0	              */
-/*					               |_ 1234.1              */
-/*					                      |_1234.2        */
-/*								    |....     */
-/*				hostname -  hostname of the machine           */
-/*			        1234     -  pid of the current process.       */
-/*			        Each of these directories are populated with  */
-/*				N number of ".c" files and a makefile that can*/
-/*				compile the ".c" files and also initiate      */
-/*				compile of ".c" files in the subdirectories   */
-/*				under it.			              */
-/*                                                                            */
-/*		Oct - 11 - 2001 Modified 				      */
-/*				- fixed a bug in the makefiles, the last make-*/
-/*				  file was expecting subdirectories. Added    */
-/*				  code to generate a different makefile for   */
-/*				  the last subdirectory.		      */
-/*				- Added logic to first compile all the c files*/
-/*				  and upon completion remove them.            */
-/*			        - Added multithreading, arguments handling.   */
-/*				  By default the program will generate 8      */
-/*				  threads, each creating by default 100 deep  */
-/*				  directory tree each containing default 100  */
-/*			          ".c" files and one makefile.                */
-/*			        - Added usage message.                        */
-/*								              */
-/*		Oct - 12 - 2001 Modified			              */
-/*				- Added logic to print missing arguments to   */
-/*				  options.                                    */
-/*                                                                            */
-/*		Oct - 15 - 2001 Modified			              */
-/*				- Added logic to remove the files, makefiles  */
-/*				  and subdirectories that were created.       */
-/*			        - Added logic to print debug messages.        */
-/*								              */
-/*		Oct - 16 - 2001 Modified		                      */
-/*				- Added sync() calls to commit changes.       */
-/*				- Fixed bug. pthread_join() returns 0 when    */
-/*			          pthread_join fails, if the thread function  */
-/*				  fails pthread_join() will put the exit value*/
-/*			          of the thread function in the thread_return */
-/*				  output argument.			      */
-/*				- Debugging function crte_mk_rm fails to      */
-/*				  create fies, problem appears only in multi- */
-/*				  threaded case.                              */
-/*								              */
-/*		Oct - 17 - 2001 Checked in		                      */
-/*				- GPL statement was added and the initial ver */
-/*			        - checked into CVS.		              */
-/*			        - note: this version works only if it is run  */
-/*				  single threaded, when its run multithreaded */
-/*		                  random thread will fail on open() sys call  */
-/*				  problem currently under investigation.      */
-/*                                                                            */
-/*		Oct - 20 - 2001 Modified				      */
-/*				- fixed a whole bunch of problems.            */
-/*			        - created function init_compile. Apparently   */
-/*				  this code works!!.                          */
-/*			        - removed system() system call that was doing */
-/*				  make and make clean. init_compile() replaces*/
-/*				  this piece of code.                         */
-/*				- on supplying the full pathname to unlink()  */
-/*				  solved most of the problems with rm_file_mk */
-/*			          function.                                   */
-/*				- reset the default vaulues for MAXT = 8      */
-/*				  MAXD = 100 and MAXF = 100.                  */
-/*				  ie. maximum number of threads = 8           */
-/*				      directory depth (num of sub dirs) = 100 */
-/*				      numeber of .c fils in each sub dir = 100*/
-/*				- finally program is now in working state.    */
-/*                                                                            */
-/*		Nov - 01 - 2001 Modified.				      */
-/*				- fixed usage message default MAXT is 8 not 1 */
-/*				- fixed make to compile the files silently    */
-/*									      */
-/*		Nov - 19 - 2001 Modified.				      */
-/*				- changed th_status in function main() from   */
-/*				  dynamic variable to static array.           */
-/*									      */
-/* File:        make_tree.c                                                   */
-/*                                                                            */
-/* Description:	This program is designed stress the NFS implimentation.       */
-/* 		Many bugs were uncovered in the AIX operating system          */
-/*		implimentation of NFS when AIX kernel was built over NFS.     */
-/*		Source directory on a remote machine (one server many clients)*/
-/*		NFS-mounted on to a directory on a local machine from which   */
-/*		the kernel build was initiated. Apparently many defects/bugs  */
-/* 		were uncovered when multiple users tried to build the kernel  */
-/* 		by NFS mounting the kernel source from a remote machine and   */
-/* 		tried to build the kernel on a local machine. AIX build envi- */
-/*		ronment is set up to create the object files and executable   */
-/*		on the local machine. 					      */
-/* 		This testcase will try to recreate such a senario.            */
-/*		Spawn N number of threads. Each thread does the following.    */
-/*		* Create a directory tree.                                    */
-/*		* Populate it with ".c" files and makefiles.                  */
-/*		* initate a build. Executable will print hello world when exed*/
-/*		* clean up all the executables that were created.             */
-/*		* recurssively remove each subdir and its contents.           */
-/*		The test is aimed at stressing the NFS client and server.     */
-/*				    hostname.1234			      */
-/*                                             |                              */
-/*				               | - 1234.0.0.c                 */
-/*					       | - 1234.0.1.c                 */
-/*                                             | - ..........                 */
-/*					       | - makefile                   */
-/*                                             |                              */
-/*					       |_ 1234.0	              */
-/*                                                    |                       */
-/*				                      | - 1234.1.0.c          */
-/*					              | - 1234.1.1.c          */
-/*                                                    | - ..........          */
-/*					              | - makefile            */
-/*                                                    |                       */
-/*					              |_ 1234.1               */
-/*                                                           |                */
-/*				                             | - 1234.2.0.c   */
-/*					                     | - 1234.2.1.c   */
-/*                                                           | - ..........   */
-/*					                     | - makefile     */
-/*                                                           |                */
-/*					                     |_1234.2         */
-/*								    |....     */
-/*                                                                            */
-/* Setup:	- on the server side:			                      */
-/*		  * create a directory /nfs_test 		              */
-/*		  * make an entry in /etc/exports file like this...           */
-/*		    "/nfs_test *(rw,no_root_squash)"		              */
-/*		  * run command "exportfs -a"		                      */
-/*	        - on client side:			                      */
-/*		  * create a directory say for eg: /nfs_cli                   */
-/*		  * mount -t nfs servername:/nfs_test /nfs_cli                */
-/*		  * set up the tescase in /nfs_cli directory		      */
-/*		- I reccomend that you have atleast 8 client machines running */
-/*		   this test, linux has 8 NFSD's running by default, you might*/
-/*		   have to increase it as per your requirement.               */
-/*		                                                              */
-/* Note:	- assumed that NFS services are installed and configured      */
-/*		- you have atleast 2 machines to act as client and server     */
-/*		  (you can have muiltiple client machines and one server)     */
-/*		- large amount of disk space, this depends on the number of   */
-/*		  of clients you will have, if you have only one client, I    */
-/*		  reccomend that the server have atleast 4 Giga bytes of      */
-/*		  disk space (paranoid!).			              */
-/*									      */
-/******************************************************************************/
-
-#include <stdio.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <pthread.h>
-#include <sys/mount.h>
-#include <linux/limits.h>
-#include <errno.h>
-#include <linux/unistd.h>
-
-#define gettid() syscall(__NR_gettid)
-
-#ifdef DEBUG
-#define dprt(fmt, args...)	printf(fmt, ## args)
-#else
-#define dprt(fmt, args...)
-#endif
-
-#define MAKE_EXE	1	/* initate a make                             */
-#define MAKE_CLEAN	0	/* initate a make clean                       */
-
-#define PTHREAD_EXIT(val)    do {\
-			exit_val = val; \
-                        dprt("pid[%d]: exiting with %d\n", gettid(),exit_val); \
-			pthread_exit((void *)exit_val); \
-				} while (0)
-
-#define OPT_MISSING(prog, opt)   do{\
-			       fprintf(stderr, "%s: option -%c ", prog, opt); \
-                               fprintf(stderr, "requires an argument\n"); \
-                               usage(prog); \
-                                   } while (0)
-
-#define MAXD	100		/* default number of directories to create.           */
-#define MAXF	100		/* default number of files to create.                 */
-#define MAXT	8		/* default number of threads to create.               */
-
-/******************************************************************************/
-/*								 	      */
-/* Function:	usage							      */
-/*									      */
-/* Description:	Print the usage message.				      */
-/*									      */
-/* Return:	exits with -1						      */
-/*									      */
-/******************************************************************************/
-static void usage(char *progname)
-{				/* name of this program                       */
-	fprintf(stderr,
-		"Usage: %s -d NUMDIR -f NUMFILES -h -t NUMTHRD\n"
-		"\t -d Number of subdirectories to generate:   Default: 100\n"
-		"\t -f Number of c files in each subdirectory: Default: 100\n"
-		"\t -h Help!\n"
-		"\t -t Number of threads to generate:          Default: 8\n",
-		progname);
-	exit(-1);
-}
-
-/******************************************************************************/
-/*								 	      */
-/* Function:	init_compile						      */
-/*									      */
-/* Description:	This function compiles the .c files and removes the exeutables*/
-/*		This function does the same function as the system() system   */
-/*		call, the code is available in the system() man page. When    */
-/*		called with the parameter MAKE_EXE it will initiate make in   */
-/*		the first directory created, the makefile is designed to build*/
-/*		recursively all the files in the subdirectories below.        */
-/*		When called with the MAKE_CLEAN parameter it will remove the  */
-/*		executables that were created design is similar to the case   */
-/*		were it initiates a make.                                     */
-/*									      */
-/* Return:	exits with 1 on error, 0 on success                           */
-/*									      */
-/******************************************************************************/
-static int init_compile(int what_todo,	/* do a compile or clean             */
-			char *base_dir,	/* base directory of the test        */
-			char *hname)
-{				/* hostname of the machine           */
-	int status;		/* return status of execve process            */
-	pid_t pid;		/* pid of the process that does compile       */
-	char *dirname;		/* location where compile is initated         */
-	char *command;		/* make or make clean command.                */
-
-	if ((dirname = malloc(sizeof(char) * 2048)) == NULL) {	/* just paranoid */
-		perror("init_compile(): dirname malloc()");
-		return 1;
-	}
-
-	if ((command = malloc(sizeof(char) * 1024)) == NULL) {	/* just paranoid */
-		perror("init_compile(): dirname malloc()");
-		return 1;
-	}
-
-	what_todo ? sprintf(command, "make -s") : sprintf(command,
-							  "make -s clean");
-
-	sprintf(dirname, "%s/%s.%ld", base_dir, hname, gettid());
-
-	if (chdir(dirname) == -1) {
-		dprt("pid[%d]: init_compile(): dir name = %s\n", gettid(),
-		     dirname);
-		perror("init_compile() chdir()");
-		free(dirname);
-		return 1;
-	}
-
-	dprt("pid[%d]: init_compile(): command = %s\n", gettid(), command);
-
-	if ((pid = fork()) == -1) {
-		perror("init_compile(): fork()");
-		return 1;
-	}
-	if (!pid) {
-		char *argv[4];
-
-		argv[0] = "/bin/sh";
-		argv[1] = "-c";
-		argv[2] = command;
-		argv[3] = 0;
-
-		if (execv("/bin/sh", argv) == -1) {
-			perror("init_compile(): execv()");
-			return 1;
-		}
-	}
-	do {
-		if (waitpid(pid, &status, 0) == -1) {
-			if (errno != EINTR) {
-				fprintf(stderr,
-					"init_compile(): waitpid() failed\n");
-				return 1;
-			}
-		} else {
-			if (chdir(base_dir) == -1) {
-				dprt("pid[%d]: init_compile(): dir = %s\n",
-				     gettid(), dirname);
-				perror("init_compile(): chdir()");
-				return 1;
-			}
-
-			dprt("pid[%d]: init_compile(): status = %d\n",
-			     gettid(), status);
-			dprt("we are here %d\n", __LINE__);
-			return status;
-		}
-
-	} while (1);
-}
-
-/******************************************************************************/
-/*								 	      */
-/* Function:	rm_file_dir						      */
-/*									      */
-/* Description: This function removes the .c files makefiles and directories. */
-/*		First removes the files in the files in the last directory    */
-/*		first then removes the last directory, then cycles through    */
-/*		each subdirectory and does the same.			      */
-/*									      */
-/* Return:	exits with 1 on error, 0 on success      		      */
-/*									      */
-/******************************************************************************/
-static int rm_file_dir(int numsdir,	/* how many subdirs to remove         */
-		       int numfiles,	/* number of files to remove per dir  */
-		       char *hname,	/* hostname of the client machine     */
-		       char *base_dir)
-{				/* directory where the test is located */
-	int filecnt;		/* index to the num of files to remove */
-	int dircnt;		/* index into directory tree          */
-	int sindex = numsdir;	/* num subdirectory tree to remove    */
-	char *dirname;		/* name of the directory to chdir()   */
-	char *tmpdirname;	/* temp name for directory, for swap  */
-	char *filename;		/* name of the cfile to remove        */
-	char *subdir;		/* name of the sub dir to remove      */
-
-	if ((dirname = malloc(sizeof(char) * 2048)) == NULL) {	/* just paranoid */
-		perror("crte_mk_rm(): dirname malloc()");
-		return 1;
-	}
-
-	if ((tmpdirname = malloc(sizeof(char) * 2048)) == NULL) {	/* just paranoid */
-		perror("crte_mk_rm(): tmpdirname malloc()");
-		return 1;
-	}
-
-	if ((filename = malloc(sizeof(char) * 2048)) == NULL) {	/* just paranoid */
-		perror("crte_mk_rm(): filename malloc()");
-		return 1;
-	}
-
-	if ((subdir = malloc(sizeof(char) * 2048)) == NULL) {	/* just paranoid */
-		perror("crte_mk_rm(): subdir malloc()");
-		return 1;
-	}
-
-	dprt("pid[%d]: base directory: %s\n", gettid(), base_dir);
-	while (sindex) {
-		/* get the name of the last directory created. */
-		for (dircnt = 0; dircnt < sindex; dircnt++) {
-			if (dircnt == 0)
-				sprintf(dirname, "%s/%s.%ld", base_dir, hname,
-					gettid());
-			else {
-				sprintf(tmpdirname, "%s/%ld.%d", dirname,
-					gettid(), dircnt);
-				sprintf(dirname, "%s", tmpdirname);
-			}
-			sync();
-		}
-
-		dprt("pid[%d]: cd'ing to last created dir: %s\n", gettid(),
-		     dirname);
-
-		sindex--;
-
-		/* remove all the ".c" files and makefile in this directory */
-		for (filecnt = 0; filecnt < numfiles; filecnt++) {
-			sprintf(filename, "%s/%ld.%d.%d.c", dirname, gettid(),
-				dircnt - 1, filecnt);
-			dprt("pid[%d]: removing file: %s\n", gettid(),
-			     filename);
-
-			if (unlink(filename)) {
-				dprt("pid[%d]: failed removing file: %s\n",
-				     gettid(), filename);
-				perror("rm_file_dir(): unlink()");
-				free(tmpdirname);
-				free(dirname);
-				free(filename);
-				free(subdir);
-				return 1;
-			}
-			sync();
-		}
-
-		sprintf(filename, "%s/%s", dirname, "makefile");
-		dprt("pid[%d]: removing %s\n", gettid(), filename);
-		if (unlink(filename)) {
-			perror
-			    ("rm_file_dir() cound not remove makefile unlink()");
-			free(tmpdirname);
-			free(dirname);
-			free(filename);
-			free(subdir);
-			return 1;
-		}
-		sync();
-
-		/* the last directory does not have any more sub directories */
-		/* nothing to remove.                                    */
-		dprt("pid[%d]: in directory count(dircnt): %d\n", gettid(),
-		     dircnt);
-		dprt("pid[%d]: last directory(numsdir): %d\n", gettid(),
-		     numsdir);
-		if (dircnt < numsdir) {
-			/* remove the sub directory */
-			sprintf(subdir, "%s/%ld.%d", dirname, gettid(), dircnt);
-			dprt("pid[%d]: removing subdirectory: %s\n", gettid(),
-			     subdir);
-			if (rmdir(subdir) == -1) {
-				perror("rm_file_dir() rmdir()");
-				free(tmpdirname);
-				free(dirname);
-				free(filename);
-				free(subdir);
-				return 1;
-			}
-			sync();
-		}
-	}
-
-	free(tmpdirname);
-	free(dirname);
-	free(filename);
-	free(subdir);
-	return 0;
-}
-
-/******************************************************************************/
-/*								 	      */
-/* Function:	crte_mk_rm						      */
-/*									      */
-/* Description:	This function gets executed by each thread that is created.   */
-/*		crte_mk_rm() created the directory tree, polpulates it with   */
-/*		".c" files and a makefile that will compile the ".c" files and*/
-/*		initiate the makefile in the subdirectory under it. Once the  */
-/*		c source files are compiled it will remove them.              */
-/*									      */
-/* Input:	The argument pointer contains the following.                  */
-/*		arg[0] - number of directories to create, depth of the tree.  */
-/*		arg[1] - number of ".c" files to create in each dir branch.   */
-/*									      */
-/* Return:	-1 on failure						      */
-/*		 0 on success					              */
-/*									      */
-/******************************************************************************/
-static void *crte_mk_rm(void *args)
-{
-	int dircnt;		/* index to the number of subdirectories      */
-	int fd;			/* file discriptor of the files genetated     */
-	int filecnt;		/* index to the number of ".c" files created  */
-	int numchar[2];		/* number of characters written to buffer     */
-	char *dirname;		/* name of the directory/idirectory tree      */
-	char *tmpdirname;	/* name of a temporary directory, for swaping */
-	char *cfilename;	/* name of the ".c" file created              */
-	char *mkfilename;	/* name of the makefile - which is "makefile" */
-	char *hostname;		/* hostname of the client machine             */
-	char *prog_buf;		/* buffer containing contents of the ".c" file */
-	char *make_buf;		/* buffer the contents of the makefile        */
-	char *pwd;		/* contains the current working directory     */
-	long *locargptr =	/* local pointer to arguments                 */
-	    (long *)args;
-	volatile int exit_val = 0;	/* exit value of the pthreads                 */
-
-	if ((dirname = malloc(sizeof(char) * 2048)) == NULL) {	/* just paranoid */
-		perror("crte_mk_rm(): dirname malloc()");
-		PTHREAD_EXIT(-1);
-	}
-
-	if ((tmpdirname = malloc(sizeof(char) * 2048)) == NULL) {
-		perror("crte_mk_rm(): tmpdirname malloc()");
-		PTHREAD_EXIT(-1);
-	}
-
-	if ((cfilename = malloc(sizeof(char) * 2048)) == NULL) {
-		perror("crte_mk_rm(): cfilename malloc()");
-		PTHREAD_EXIT(-1);
-	}
-
-	if ((mkfilename = malloc(sizeof(char) * 2048)) == NULL) {
-		perror("crte_mk_rm(): mkfilename malloc()");
-		PTHREAD_EXIT(-1);
-	}
-
-	if ((prog_buf = malloc(sizeof(char) * 4096)) == NULL) {
-		perror("crte_mk_rm(): prog_buf malloc()");
-		PTHREAD_EXIT(-1);
-	}
-
-	if ((pwd = malloc(PATH_MAX)) == NULL) {
-		perror("crte_mk_rm(): pwd malloc()");
-		PTHREAD_EXIT(-1);
-	}
-
-	if ((hostname = malloc(sizeof(char) * 1024)) == NULL) {
-		perror("crte_mk_rm(): hostname malloc()");
-		PTHREAD_EXIT(-1);
-	}
-
-	if (gethostname(hostname, 255) == -1) {
-		perror("crte_mk_rm(): gethostname()");
-		PTHREAD_EXIT(-1);
-	}
-	if (!getcwd(pwd, PATH_MAX)) {
-		perror("crte_mk_rm(): getcwd()");
-		PTHREAD_EXIT(-1);
-	}
-
-	numchar[0] = sprintf(prog_buf,
-			     "main()\n{\n\t printf(\"hello world\");\n}\n");
-
-	for (dircnt = 0; dircnt < (int)locargptr[0]; dircnt++) {
-		/* First create the base directory, then create the subdirectories   */
-		if (dircnt == 0)
-			sprintf(dirname, "%s.%ld", hostname, gettid());
-		else {
-			sprintf(tmpdirname, "%s/%ld.%d", dirname, gettid(),
-				dircnt);
-			sprintf(dirname, "%s", tmpdirname);
-		}
-		sync();
-
-		dprt("pid[%d] creating directory: %s\n", gettid(), dirname);
-		if (mkdir(dirname, 0777) == -1) {
-			perror("crte_mk_rm(): mkdir()");
-			PTHREAD_EXIT(-1);
-		}
-	}
-
-	sync();
-	usleep(10);
-	for (dircnt = 0; dircnt < (int)locargptr[0]; dircnt++) {
-		if (dircnt == 0)
-			sprintf(dirname, "%s/%s.%ld", pwd, hostname, gettid());
-		else {
-			sprintf(tmpdirname, "%s/%ld.%d", dirname, gettid(),
-				dircnt);
-			sprintf(dirname, "%s", tmpdirname);
-		}
-		sync();
-		if ((make_buf = malloc(sizeof(char) * 4096)) == NULL) {
-			perror("crte_mk_rm(): make_buf malloc()");
-			PTHREAD_EXIT(-1);
-		}
-		sprintf(mkfilename, "%s/makefile", dirname);
-		{
-			/* HACK! I could not write "%.c" to the makefile */
-			/* there is probably a correct way to do it      */
-			char *dotc = malloc(10);
-			dotc = ".c";
-			sync();
-			usleep(10);
-			if (dircnt == (locargptr[0] - 1)) {
-				numchar[1] = sprintf(make_buf,
-						     "CFLAGS := -O -w -g\n"
-						     "SUBDIRS = %ld.%d\n"
-						     "SRCS=$(wildcard *.c)\n"
-						     "TARGETS=$(patsubst %%%s,\%%,$(SRCS))\n"
-						     "all:\t $(TARGETS)\n"
-						     "clean:\n"
-						     "\trm -f $(TARGETS)\n",
-						     gettid(), dircnt + 1,
-						     dotc);
-			} else {
-				numchar[1] = sprintf(make_buf,
-						     "CFLAGS := -O -w -g\n"
-						     "SUBDIRS = %ld.%d\n"
-						     "SRCS=$(wildcard *.c)\n"
-						     "TARGETS=$(patsubst %%%s,\%%,$(SRCS))\n\n\n"
-						     "all:\t $(TARGETS)\n"
-						     "\t@for i in $(SUBDIRS); do $(MAKE) -C $$i ; done\n\n"
-						     "clean:\n"
-						     "\trm -f $(TARGETS)\n"
-						     "\t@for i in $(SUBDIRS); do $(MAKE) -C $$i clean ; done\n",
-						     gettid(), dircnt + 1,
-						     dotc);
-			}
-		}
-
-		sync();
-		usleep(10);
-		dprt("pid[%d]: creating in dir: %s\n", gettid(), mkfilename);
-		/* create the makefile, complies .c files and initiates make in   */
-		/* subdirectories.                                                */
-		if ((fd = open(mkfilename, O_CREAT | O_RDWR,
-			       S_IRWXU | S_IRWXG | S_IRWXO)) == -1) {
-			dprt(" pid[%d]: failed to create makefile\n", gettid());
-			dprt("pid[%d]: failed in directory %s\n", gettid(),
-			     dirname);
-			perror("crte_mk_rm() failed creating makefile: open()");
-			PTHREAD_EXIT(-1);
-		} else {
-			sync();
-			if (write(fd, make_buf, numchar[1]) == -1) {
-				perror("crte_mk_rm(): write()");
-				PTHREAD_EXIT(-1);
-			}
-
-			free(make_buf);
-
-			if (close(fd) == -1) {
-				perror("crte_mk_rm(): close()");
-				PTHREAD_EXIT(-1);
-			}
-		}
-	}
-
-	for (dircnt = 0; dircnt < (int)locargptr[0]; dircnt++) {
-		if (dircnt == 0)
-			sprintf(dirname, "%s/%s.%ld", pwd, hostname, gettid());
-		else {
-			sprintf(tmpdirname, "%s/%ld.%d", dirname, gettid(),
-				dircnt);
-			sprintf(dirname, "%s", tmpdirname);
-		}
-		sync();
-		/* In each directory create N ".c" files and a makefile. */
-		for (filecnt = 0; filecnt < (int)locargptr[1]; filecnt++) {
-			sprintf(cfilename, "%s/%ld.%d.%d.c", dirname, gettid(),
-				dircnt, filecnt);
-			dprt("pid[%d]: creating file: %s\n", gettid(),
-			     cfilename);
-			if ((fd =
-			     open(cfilename, O_CREAT | O_RDWR,
-				  S_IRWXU | S_IRWXG | S_IRWXO)) == -1) {
-				fprintf(stderr,
-					"open() failed to create file %s\n",
-					cfilename);
-				perror
-				    ("crte_mk_rm(): failed creating .c files: open()");
-				PTHREAD_EXIT(-1);
-			} else {
-				sync();
-				/* write the code, this program prints hello world */
-				if (write(fd, prog_buf, numchar[0]) == -1) {
-					perror("crte_mk_rm(): write()");
-					PTHREAD_EXIT(-1);
-				}
-
-				fsync(fd);
-
-				if (close(fd) == -1) {
-					perror("crte_mk_rm(): close()");
-					PTHREAD_EXIT(-1);
-				}
-			}
-
-		}
-	}
-
-	if (init_compile(MAKE_EXE, pwd, hostname) == 1) {
-		fprintf(stderr, "init_compile() make failed\n");
-		PTHREAD_EXIT(-1);
-	} else {
-		if (init_compile(MAKE_CLEAN, pwd, hostname) == 1) {
-			fprintf(stderr, "init_compile() make clean failed\n");
-			PTHREAD_EXIT(-1);
-		}
-	}
-
-	sync();
-	/* remove all the files makefiles and subdirecotries  */
-	if (rm_file_dir((int)locargptr[0], (int)locargptr[1], hostname, pwd)) {
-		fprintf(stderr, "crte_mk_rm(): rm_file_dir() failed\n");
-		PTHREAD_EXIT(-1);
-	}
-	/* if it made it this far exit with success */
-	PTHREAD_EXIT(0);
-}
-
-/******************************************************************************/
-/*								 	      */
-/* Function:	main							      */
-/*									      */
-/* Description:	This is the entry point to the program. This function will    */
-/*		parse the input arguments and set the values accordingly. If  */
-/*		no arguments (or desired) are provided default values are used*/
-/*		refer the usage function for the arguments that this program  */
-/*		takes. It also creates the threads which do most of the dirty */
-/*		work. If the threads exits with a value '0' the program exits */
-/*		with success '0' else it exits with failure '-1'.             */
-/*									      */
-/* Return:	-1 on failure						      */
-/*		 0 on success						      */
-/*									      */
-/******************************************************************************/
-int main(int argc,		/* number of input parameters                 */
-	 char **argv)
-{				/* pointer to the command line arguments.     */
-	int c;			/* command line options                       */
-	int num_thrd = MAXT;	/* number of threads to create                */
-	int num_dirs = MAXD;	/* number of subdirectories to create         */
-	int num_files = MAXF;	/* number of files in each subdirectory      */
-	int thrd_ndx;		/* index into the array of thread ids         */
-	void *th_status;	/* exit status of LWP's                       */
-	pthread_t thrdid[30];	/* maxinum of 30 threads allowed              */
-	long chld_args[3];	/* arguments to the thread function           */
-	extern int optopt;	/* options to the program                     */
-
-	while ((c = getopt(argc, argv, "d:f:ht:")) != -1) {
-		switch (c) {
-		case 'd':	/* specify how deep the tree needs to grow    */
-			if ((num_dirs = atoi(optarg)) == 0)
-				OPT_MISSING(argv[0], optopt);
-			else if (num_dirs < 0) {
-				fprintf(stdout,
-					"WARNING: bad argument. Using default\n");
-				num_dirs = MAXD;
-			}
-			break;
-		case 'f':	/* how many ".c" files in each directory.     */
-			if ((num_files = atoi(optarg)) == 0)
-				OPT_MISSING(argv[0], optopt);
-			else if (num_files < 0) {
-				fprintf(stdout,
-					"WARNING: bad argument. Using default\n");
-				num_files = MAXF;
-			}
-			break;
-		case 'h':
-			usage(argv[0]);
-			break;
-		case 't':
-			if ((num_thrd = atoi(optarg)) == 0)
-				OPT_MISSING(argv[0], optopt);
-			else if (num_thrd < 0) {
-				fprintf(stdout,
-					"WARNING: bad argument. Using default\n");
-				num_thrd = MAXT;
-			}
-			break;
-		default:
-			usage(argv[0]);
-			break;
-		}
-	}
-
-	chld_args[0] = num_dirs;
-	chld_args[1] = num_files;
-
-	for (thrd_ndx = 0; thrd_ndx < num_thrd; thrd_ndx++) {
-		if (pthread_create
-		    (&thrdid[thrd_ndx], NULL, crte_mk_rm, chld_args)) {
-			perror("crte_mk_rm(): pthread_create()");
-			exit(-1);
-		}
-	}
-
-	sync();
-
-	for (thrd_ndx = 0; thrd_ndx < num_thrd; thrd_ndx++) {
-		if (pthread_join(thrdid[thrd_ndx], &th_status) != 0) {
-			perror("crte_mk_rm(): pthread_join()");
-			exit(-1);
-		} else {
-			dprt("WE ARE HERE %d\n", __LINE__);
-			if (th_status == (void *)-1) {
-				fprintf(stderr,
-					"thread [%ld] - process exited with errors\n",
-					thrdid[thrd_ndx]);
-				exit(-1);
-			}
-		}
-	}
-	return (0);
-}
diff --git a/testcases/network/nfs/nfsstress/nfsstress b/testcases/network/nfs/nfsstress/nfsstress
deleted file mode 100755
index 6e337d9..0000000
--- a/testcases/network/nfs/nfsstress/nfsstress
+++ /dev/null
@@ -1,207 +0,0 @@
-#! /bin/sh
-#
-#   Copyright (c) International Business Machines  Corp., 2001
-#
-#   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
-#   the Free Software Foundation; either version 2 of the License, or
-#   (at your option) any later version.
-#
-#   This program is distributed in the hope that it will be useful,
-#   but WITHOUT ANY WARRANTY;  without even the implie; warranty of
-#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
-#   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
-#
-#
-#
-#  FILE   : nfsstress
-#
-#  DESCRIPTION: This script sets up the NFS directories in the remote machine
-#               and invokes the program make_tree with parameters.
-#
-#  SETUP: The home directory of root on the machine exported as "RHOST"
-#         MUST have a ".rhosts" file with the hostname of the machine
-#         where the test is executed.
-#
-#
-#  HISTORY:
-#    11/1/01 Robbie Williamson (robbiew@us.ibm.com)
-#      -Created
-#
-#***********************************************************************
-
-#Uncomment line below for debug output.
-#trace_logic=${trace_logic:-"set -x"}
-
-$trace_logic
-
-#-----------------------------------------------------------------------
-# Initialize local variables
-#-----------------------------------------------------------------------
-TC=${TC:=nfsstress}
-TCbin=${TCbin:=$LTPROOT/testcases/bin}
-TCsrc=${TCsrc:=$TCbin}
-TCtmp=${TCtmp:=$TMPDIR/$TC$$}
-RHOST=${RHOST:=`hostname|awk {'print $1'}`}
-export TCID=$TC
-export TST_TOTAL=1
-export TST_COUNT=1
-
-# Setting the NFS to version 3 with UDP by default
-PID=$$
-VERSION=${VERSION:=3}
-SOCKET_TYPE=${SOCKET_TYPE:=udp}
-TESTDIR=${TESTDIR:=/tmp/$TC$PID.testdir}
-NFS_TYPE=${NFS_TYPE:=nfs}
-
-# If CLEANUP is not set; set it to "ON"
-CLEANUP=${CLEANUP:="ON"}
-
-# If EXECUTABLES is not set; set it to default executables
-EXECUTABLES=${EXECUTABLES:="make_tree"}
-
-DIR_NUM=$1
-FILE_NUM=$2
-THREAD_NUM=$3
-
-DIR_NUM=${DIR_NUM:=100}
-FILE_NUM=${FILE_NUM:=100}
-THREAD_NUM=${THREAD_NUM:=8}
-
-#=============================================================================
-# FUNCTION NAME:        setup_testcase
-#
-# FUNCTION DESCRIPTION: Perform the setup function for the testcase.
-#
-# PARAMETERS:   	None.
-#
-# RETURNS:      	None.
-#=============================================================================
-
-setup_testcase()
-{
-$trace_logic
-
-
-    echo ""
-    echo "Test Options:"
-    echo " VERSION: $VERSION"
-    echo " RHOST: $RHOST"
-    echo " SOCKET_TYPE: $SOCKET_TYPE"
-    echo " NFS_TYPE: $NFS_TYPE"
-    echo ""
-    echo "Test Parameters:"
-    echo " Number of Directories: $DIR_NUM"
-    echo " Number of Files per Directory: $FILE_NUM"
-    echo " Number of Threads: $THREAD_NUM"
-    echo ""
-
-    if [ "x$NFS_TYPE" != "xnfs4" ]; then
-        OPTS=${OPTS:="-o vers=$VERSION,proto=$SOCKET_TYPE "}
-    fi
-    REMOTE_DIR=${RHOST}:$TESTDIR
-    LOCAL_DIR=$TCtmp/${RHOST}
-    mkdir -p $TCtmp || end_testcase "Could not create $TCtmp"
-    chmod 777 $TCtmp
-
-    echo "Setting up remote machine: $RHOST"
-    rsh -n $RHOST "mkdir $TESTDIR"
-    [ $? = 0 ] || end_testcase "Could not create remote directory"
-
-   if [ "x$NFS_TYPE" = "xnfs4" ]; then
-        rsh -n $RHOST "mkdir -p /export$TESTDIR"
-        [ $? = 0 ] || end_testcase "Could not create /export$TESTDIR on server"
-        rsh -n $RHOST "mount --bind $TESTDIR /export$TESTDIR"
-        [ $? = 0 ] || end_testcase "Could not bind $TESTDIR to export on server"
-        rsh -n $RHOST "/usr/sbin/exportfs -o no_root_squash,rw,nohide,insecure,no_subtree_check *:$TESTDIR"
-        [ $? = 0 ] || end_testcase "Could not export remote directory"
-    else
-        rsh -n $RHOST "/usr/sbin/exportfs -i -o no_root_squash,rw *:$TESTDIR"
-        [ $? = 0 ] || end_testcase "Could not export remote directory"
-    fi
-
-    echo "Mounting NFS filesystem $REMOTE_DIR on $TCtmp with options '$OPTS'"
-    mount -t $NFS_TYPE $OPTS $REMOTE_DIR $TCtmp || end_testcase "Cannot mount $TCtmp"
-    [ $? = 0 ] || end_testcase "Could not mount $REMOTE_DIR"
-
-    cd $TCtmp
-    echo "Removing old and create new directories"
-    [ -d $LOCAL_DIR ] && rm -rf $LOCAL_DIR
-    [ -d $LOCAL_DIR ] || { \
-	mkdir -p $LOCAL_DIR || end_testcase "Could not create $LOCAL_DIR"
-	chmod 777 $LOCAL_DIR
-        cp $TCsrc/$EXECUTABLES $LOCAL_DIR || end_testcase "Could not write to mount point"
-    }
-
-}
-
-
-#=============================================================================
-# FUNCTION NAME:        do_test
-#
-# FUNCTION DESCRIPTION: Perform the test
-#
-# PARAMETERS:   	None.
-#
-# RETURNS:      	None.
-#=============================================================================
-do_test()
-{
-$trace_logic
-    EXEC=${EXEC:=$EXECUTABLES -d $DIR_NUM -f $FILE_NUM -t $THREAD_NUM}
-    cd $LOCAL_DIR
-    echo "${LOCAL_DIR}/${EXEC} Starting"
-    ./$EXEC &
-    wait $!
-    retval=$?
-    echo "${LOCAL_DIR}/${EXEC} Finished"
-
-    if [ "$retval" != 0 ]; then
-      end_testcase "Errors have resulted from this test: $EXECUTABLES returned $retval."
-    fi
-
-    cd /
-}
-
-
-#=============================================================================
-# FUNCTION NAME:        end_testcase
-#
-# FUNCTION DESCRIPTION: Clean up
-#
-# PARAMETERS:   	None.
-#
-# RETURNS:      	None.
-#=============================================================================
-end_testcase()
-{
-$trace_logic
-    if [ "$CLEANUP" = "ON" ]; then
-	cd \
-
-	echo "Cleaning up testcase"
-	rm -rf $LOCAL_DIR || echo "Cannot remove $LOCAL_DIR"
-	sleep 2
-        /bin/umount $TCtmp || echo "Cannot umount $TCtmp"
-	sleep 2
-	rm -rf $TCtmp || echo "Cannot remove $TCtmp"
-        rsh -n $RHOST "/usr/sbin/exportfs -u *:$TESTDIR"
-		 rsh -n $RHOST "rm -rf $TESTDIR"
-    fi
-
-    [ $# = 0 ] && { tst_resm TPASS "Test Successful"; exit 0; }
-    tst_resm TFAIL "Test Failed: $@"
-    exit 1
-}
-
-#=============================================================================
-# MAIN PROCEDURE
-#=============================================================================
-
-setup_testcase
-do_test
-end_testcase
-- 
1.7.1



More information about the Ltp mailing list