1e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
2e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#include <stdio.h>
3e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#include <stdlib.h>
4e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#include <unistd.h>
5e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#include <string.h>
6e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#include <ctype.h>
7e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#include <errno.h>
8e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#include <math.h>
9e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#include <time.h>
10e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#include <ftw.h>
11e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#include <sys/types.h>
12e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#include <sys/stat.h>
13e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#include <fcntl.h>
14e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#include <sys/ioctl.h>
15e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#include <linux/kd.h>
16e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#include <linux/errno.h>
17e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
18e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#include "Ltpfs.h"
19e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
20e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#define M_2PI (M_PI*2)
21e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#define MAXN 4096
22e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#define MAXFSIZE 1024 * 192
23e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#define FILE_CREATE_COUNT 256
24e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#define FAIL 0
25e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#define SUCCESS 1
26e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#define MAXNUM   5000
27e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#define BUFFSIZE 8192
28e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#define AVEFSIZE (MAXFSIZE/2)
29e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#define POOLDISKSPACE (AVEFSIZE*128)
30e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#define MAXERROR  1024
31e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#define FILES_ONLY 0x01
32e87db4bb965b58b73ce733cc3e32dd42101393d0mridge#define ALL        0x00
33e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
34e87db4bb965b58b73ce733cc3e32dd42101393d0mridge// Globals
35e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
36e87db4bb965b58b73ce733cc3e32dd42101393d0mridgechar wbuf[MAXFSIZE];
37354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint startc = 0;
38354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint showchar[] = { 124, 47, 45, 92, 124, 47, 45, 92 };
39354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
40e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint nullFileHandle;
41354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint openlog[2] = { 0, 0 };
42354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
43e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint cFileCount, dFileCount, errorCount;
44e87db4bb965b58b73ce733cc3e32dd42101393d0mridgestatic int disk_space_pool = 0;
45e87db4bb965b58b73ce733cc3e32dd42101393d0mridgechar rootPath[BUFFSIZE];
46e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
47e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint LTP_fs_open_block_device(void);
48354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint do_fs_thump_tests(char *path);
49354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint do_create_file_test(char *path);
504bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modakint makedir(char *dir1);
51e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint changedir(char *dir);
52e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint do_random_access_test(int maxNum);
53e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint do_random_create_delete(int maxNum);
54e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint create_file(char *filename);
55e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint delete_file(char *filename);
56e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint gen_random_file_size(int min, int max);
57e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint open_read_close(char *fname);
58e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint create_or_delete(char *fname);
59e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint do_tree_cleanup(char *path, int flag);
60354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint cleanup_files(char *file, struct stat *statBuff, int flag);
61354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint cleanup_dirs(char *file, struct stat *statBuff, int flag);
62e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
63354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint ltp_block_dev_handle = 0;	/* handle to LTP Test block device */
64e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint ltp_fileHandle = 0;
65354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaochar *fileBuf;
66e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
67e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint main(int argc, char **argv)
68e87db4bb965b58b73ce733cc3e32dd42101393d0mridge{
69e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
70354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	ltpdev_cmd_t cmd = { 0, 0 };
71354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int rc, i, tmpHandle;
72354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	struct stat statBuf;
73e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
74354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("[%s] - Running test program\n", argv[0]);
75e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
76354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	rc = LTP_fs_open_block_device();
77e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
78354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (!rc) {
79e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
80354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		ltp_block_dev_handle = open(LTP_FS_DEVICE_NAME, O_RDWR);
81e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
82354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if (ltp_block_dev_handle < 0) {
83354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			printf
84354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    ("ERROR: Open of device %s failed %d errno = %d\n",
85354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			     LTP_FS_DEVICE_NAME, ltp_block_dev_handle, errno);
86354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else {
87354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			rc = ioctl(ltp_block_dev_handle, LTPAIODEV_CMD, &cmd);
88e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
89354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			printf("return from AIO ioctl %d \n", rc);
90e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
91354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			rc = ioctl(ltp_block_dev_handle, LTPBIODEV_CMD, &cmd);
92e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
93354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			printf("return from BIO ioctl %d \n", rc);
94354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		}
95e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
96354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
97354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("ERROR: Create/open block device failed\n");
98354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
99e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
100354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	ltp_fileHandle =
101354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    open("/tmp/testfile", O_CREAT | O_RDWR | O_SYNC | FASYNC,
102354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		 S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
103e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
104354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ltp_fileHandle > 0) {
105e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
106354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		tmpHandle = open("/usr/include/ctype.h", O_RDONLY);
107e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
108354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if (tmpHandle > 0) {
109e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
110354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			rc = fstat(tmpHandle, &statBuf);
111e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
112354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!rc) {
113354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				fileBuf = malloc(statBuf.st_size);
114e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
115354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (fileBuf) {
116e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
117354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					read(tmpHandle, fileBuf,
118354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					     statBuf.st_size);
119354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					close(tmpHandle);
120354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					write(ltp_fileHandle, fileBuf,
121354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					      statBuf.st_size);
122e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
123354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					for (i = 0; i < 100; i++) {
124354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						read(ltp_fileHandle, fileBuf,
125354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						     statBuf.st_size * i);
126354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						write(ltp_fileHandle, fileBuf,
127354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						      statBuf.st_size * i);
128354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					}
129354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
130e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
131354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
132e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
133354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else {
134354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			printf("ERROR: Create/open file failed\n");
135354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		}
136354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
137e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
138354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("*** Starting FileSystem thump tests....****\n");
139354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("*** Please be patient, this may take a little while... ***\n");
140e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
141354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	for (i = 1; i < argc; i++) {
142354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("Running test %d of %d on FileSystem %s \n", i, argc - 1,
143354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		       argv[i]);
144354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if (strcmp(argv[i], "|") != 0) {
145354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			strcpy(rootPath, argv[i]);
146354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			rc = do_fs_thump_tests(argv[i]);
147354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (rc != 0 && rc != ENOSPC) {
148354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				printf
149354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    ("ERROR: Failed on FileSystem %s with errno %d \n",
150354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     argv[i], rc);
151354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
152354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else {
153354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			printf("Test Program complete..\n");
154354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			break;
155354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		}
156e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
157354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
158e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
159354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("Test Program complete..\n");
160e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
161354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return 0;
162e87db4bb965b58b73ce733cc3e32dd42101393d0mridge}
163354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
164354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint do_fs_thump_tests(char *path)
165e87db4bb965b58b73ce733cc3e32dd42101393d0mridge{
166354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int rc = 0;
167e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
168354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("Changing to directory %s \n", path);
169e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
170354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	changedir(path);
171e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
172354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	cFileCount = 0;
173354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dFileCount = 0;
174e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
175354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	rc |= do_create_file_test(path);
176354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	rc |= do_random_access_test(MAXNUM);
177354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	rc |= do_tree_cleanup(path, FILES_ONLY);
178354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	rc |= do_random_create_delete(MAXNUM);
179354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	rc |= do_tree_cleanup(path, ALL);
180e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
181354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return rc;
182e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
183e87db4bb965b58b73ce733cc3e32dd42101393d0mridge}
184354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
185e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint do_tree_cleanup(char *path, int flag)
186e87db4bb965b58b73ce733cc3e32dd42101393d0mridge{
187e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
188354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (flag == FILES_ONLY) {
189354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("Cleaning up test files...\n");
190354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		ftw(path, (void *)cleanup_files, MAXNUM);
191354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
192354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("Cleaning up everything in the test directory...\n");
193354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		ftw(path, (void *)cleanup_files, MAXNUM);
194354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		ftw(path, (void *)cleanup_dirs, MAXNUM);
195354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
196354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
197354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return 0;
198e87db4bb965b58b73ce733cc3e32dd42101393d0mridge}
199354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
200354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint cleanup_files(char *file, struct stat *statBuff, int flag)
201e87db4bb965b58b73ce733cc3e32dd42101393d0mridge{
202354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int rc = 0;
203e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
204354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (flag == FTW_F) {
205354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if (unlink(file)) {
206354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			printf("ERROR:%d removing file %s\n", errno, file);
207354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		}
208354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
209e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
210354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return rc;
211e87db4bb965b58b73ce733cc3e32dd42101393d0mridge}
212e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
213354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint cleanup_dirs(char *file, struct stat *statBuff, int flag)
214e87db4bb965b58b73ce733cc3e32dd42101393d0mridge{
215354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int rc = 0;
216354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
217354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	//printf("%s:Cleaning up directory %s \n", __FUNCTION__, file);
218354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
219354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (strcmp(rootPath, file) == 0) {
220354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return 0;
221354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
222354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
223354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (flag == FTW_F) {
224354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if (unlink(file)) {
225354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			printf("ERROR:%d removing file %s\n", errno, file);
226354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		}
227354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else if (flag == FTW_D) {
228354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		changedir(file);
229354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		ftw(file, (void *)cleanup_dirs, MAXNUM);
230354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		rmdir(file);
231354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
232354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
233354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("No idea what we found here\n");
234354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
235354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
236354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return rc;
237e87db4bb965b58b73ce733cc3e32dd42101393d0mridge}
238e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
239354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint do_create_file_test(char *path)
240e87db4bb965b58b73ce733cc3e32dd42101393d0mridge{
241354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int i = 0;
242354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int j = 0;
243354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int k = 0;
244354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int l = 0;
245354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int rc = 0;
246e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
247354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	char dir1[MAXN];
248354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	char dir2[MAXN];
249354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	char dir3[MAXN];
250354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	char filename[MAXN];
251e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
252354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	time_t t;
253e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
254354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int maxfiles = 0xFFFFFF;
255e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
256354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	time(&t);
257e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
258354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	srandom((unsigned int)getpid() ^
259354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		(((unsigned int)t << 16) | (unsigned int)t >> 16));
260e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
261354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("Creating files...\n");
262e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
263354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	for (i = 0; i < FILE_CREATE_COUNT; i++) {
264e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
265354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		sprintf(dir1, "%2.2x", i);
266e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
267354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		makedir(dir1);
268e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
269354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		changedir(dir1);
270e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
271354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		for (j = 0; j < FILE_CREATE_COUNT; j++) {
272e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
273354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			sprintf(dir2, "%2.2x", j);
274e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
275354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			makedir(dir2);
276e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
277354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			changedir(dir2);
278e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
279354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			for (k = 0; k < FILE_CREATE_COUNT; k++) {
280e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
281354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				sprintf(dir3, "%2.2x", k);
282354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				makedir(dir3);
283354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				changedir(dir3);
284e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
285354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				for (l = 0; l < FILE_CREATE_COUNT; l++) {
286354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					sprintf(filename, "%s%s%s%2.2x", dir1,
287354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						dir2, dir3, l);
288354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					rc = create_file(filename);
289354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					if (rc != 0 || maxfiles < dFileCount++) {
290354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						if (rc != ENOSPC) {
291354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao							printf
292354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao							    ("ERROR: failed error:%d creating all the test files ! \n",
293354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao							     errno);
294354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao							printf
295354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao							    ("ERROR2: rc:%d -- dFileCount:%d \n",
296354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao							     rc, dFileCount);
297354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						}
298354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						goto end;
299354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					}
300354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
301354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				changedir("../");
302354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
303354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			changedir("../");
304354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		}
305354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		changedir("../");
306354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
307354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoend:
308354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	fprintf(stderr, "\nTotal create files: %d\n", cFileCount);
309354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("Done\n");
310354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return rc;
311e87db4bb965b58b73ce733cc3e32dd42101393d0mridge}
312e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
3134bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modakint makedir(char *dir1)
314e87db4bb965b58b73ce733cc3e32dd42101393d0mridge{
315354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (mkdir(dir1, S_IRWXU) < 0) {
316354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		perror(dir1);
317354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (errno);
318354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
319354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return 0;
320e87db4bb965b58b73ce733cc3e32dd42101393d0mridge}
321e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
322354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint changedir(char *dir)
323354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
324354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (chdir(dir) < 0) {
325354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		perror(dir);
326354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (errno);
327354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
328e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
329354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return 0;
330e87db4bb965b58b73ce733cc3e32dd42101393d0mridge}
331e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
3324bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modakint create_file(char *filename)
333e87db4bb965b58b73ce733cc3e32dd42101393d0mridge{
334354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int fileHandle;
335354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int randomsize;
336e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
337354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((fileHandle = creat(filename, S_IRWXU)) < 0) {
338e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
339354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		fprintf(stderr, "\nERROR line %d: Total create files: %d\n",
340354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			__LINE__, cFileCount);
341354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		perror(filename);
342354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (errno);
343354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
344e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
345354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((randomsize = gen_random_file_size(0, MAXFSIZE)) < 0) {
346354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		randomsize = MAXFSIZE;
347354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
348354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (write(fileHandle, wbuf, randomsize) < 0) {
349e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
350354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		fprintf(stderr, "\nERROR:%d line%d: Total create files: %d\n",
351354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			errno, __LINE__, cFileCount);
352354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		close(fileHandle);
353e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
354354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		perror(filename);
355354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (errno);
356354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
357e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
358354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	cFileCount++;
359354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	close(fileHandle);
360354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return 0;
361e87db4bb965b58b73ce733cc3e32dd42101393d0mridge}
362e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
3634bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modakint delete_file(char *filename)
364e87db4bb965b58b73ce733cc3e32dd42101393d0mridge{
365354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	struct stat buf;
366354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int st;
367e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
368354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	st = stat(filename, &buf);
369e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
370354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (st < 0) {
371354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		errorCount++;
372354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("ERROR line %d: Getting file stats %s \n", __LINE__,
373354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		       filename);
374354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
375354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
376e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
377354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	disk_space_pool += buf.st_size;
378e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
379354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (unlink(filename) < 0) {
380354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		errorCount++;
381354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("ERROR line %d: Removing file %s \n", __LINE__,
382354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		       filename);
383354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
384354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
385e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
386354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dFileCount++;
387354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return 0;
388e87db4bb965b58b73ce733cc3e32dd42101393d0mridge}
389e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
390e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint LTP_fs_open_block_device()
391e87db4bb965b58b73ce733cc3e32dd42101393d0mridge{
392354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	dev_t devt;
393354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	struct stat statbuf;
394354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int rc;
395354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
396354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (ltp_block_dev_handle == 0) {
397354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
398354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		/* check for the /dev/LTPFSTest subdir, and create if it does not exist.
399354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		 *
400354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		 * If devfs is running and mounted on /dev, these checks will all pass,
401354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		 * so a new node will not be created.
402354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		 */
403354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		devt = makedev(LTPMAJOR, 0);
404354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
405354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		rc = stat(LTP_FS_DEV_NODE_PATH, &statbuf);
406354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
407354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if (rc) {
408354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (errno == ENOENT) {
409354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				/* dev node does not exist. */
410354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				rc = mkdir(LTP_FS_DEV_NODE_PATH,
411354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					   (S_IFDIR | S_IRWXU | S_IRGRP |
412354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    S_IXGRP | S_IROTH | S_IXOTH));
413354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else {
414354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				printf
415354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    ("ERROR: Problem with LTP FS dev directory.  Error code from stat() is %d\n\n",
416354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     errno);
417354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
418354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
419354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else {
420354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (!(statbuf.st_mode & S_IFDIR)) {
421354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				rc = unlink(LTP_FS_DEV_NODE_PATH);
422354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (!rc) {
423354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					rc = mkdir(LTP_FS_DEV_NODE_PATH,
424354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						   (S_IFDIR | S_IRWXU | S_IRGRP
425354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    | S_IXGRP | S_IROTH |
426354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    S_IXOTH));
427354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
428354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
429354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		}
430354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
431354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		/*
432354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		 * Check for the /dev/ltp-fs/block_device node, and create if it does not
433354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		 * exist.
434354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		 */
435354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		rc = stat(LTP_FS_DEVICE_NAME, &statbuf);
436354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if (rc) {
437354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (errno == ENOENT) {
438354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				/* dev node does not exist */
439354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				rc = mknod(LTP_FS_DEVICE_NAME,
440354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					   (S_IFBLK | S_IRUSR | S_IWUSR |
441354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					    S_IRGRP | S_IWGRP), devt);
442354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			} else {
443354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				printf
444354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				    ("ERROR:Problem with LTP FS block device node directory.  Error code form stat() is %d\n\n",
445354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				     errno);
446354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
447354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
448354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		} else {
449354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			/*
450354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			 * /dev/ltp-fs/block_device exists.  Check to make sure it is for a
451354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			 * block device and that it has the right major and minor.
452354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			 */
453354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if ((!(statbuf.st_mode & S_IFBLK)) ||
454354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			    (statbuf.st_rdev != devt)) {
455354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
456354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				/* Recreate the dev node. */
457354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				rc = unlink(LTP_FS_DEVICE_NAME);
458354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				if (!rc) {
459354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao					rc = mknod(LTP_FS_DEVICE_NAME,
460354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						   (S_IFBLK | S_IRUSR | S_IWUSR
461354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao						    | S_IRGRP | S_IWGRP), devt);
462354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				}
463354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
464354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		}
465354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
466354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
467354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
468354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return rc;
469e87db4bb965b58b73ce733cc3e32dd42101393d0mridge}
470e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
471e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint gen_random_file_size(int min, int max)
472e87db4bb965b58b73ce733cc3e32dd42101393d0mridge{
473354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	double u1, u2, z;
474354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int i;
475354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int ave;
476354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int range;
477354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int ZZ;
478354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (min >= max) {
479354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (-1);
480354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
481354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	range = max - min;
482354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	ave = range / 2;
483354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	for (i = 0; i < 10; i++) {
484354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		u1 = ((double)(random() % 1000000)) / 1000000;
485354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		u2 = ((double)(random() % 1000000)) / 1000000;
486354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		z = sqrt(-2.0 * log(u1)) * cos(M_2PI * u2);
487354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		ZZ = min + (ave + (z * (ave / 4)));
488354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if (ZZ >= min && ZZ < max) {
489354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			return (ZZ);
490354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		}
491354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
492354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return (-1);
493e87db4bb965b58b73ce733cc3e32dd42101393d0mridge}
494e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
495e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint do_random_access_test(int maxNum)
496e87db4bb965b58b73ce733cc3e32dd42101393d0mridge{
497354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int r;
498354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	char fname[1024];
499354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	time_t t;
500354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int i;
501354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
502354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("Running random access test...\n");
503354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	changedir(rootPath);
504354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
505354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (maxNum < 1 || maxNum > MAXNUM) {
506354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("out of size %d\n", maxNum);
507354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return 1;
508354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
509354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
510354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	time(&t);
511354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	srandom((unsigned int)getpid() ^
512354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		(((unsigned int)t << 16) | (unsigned int)t >> 16));
513354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
514354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((nullFileHandle = open("/dev/null", O_WRONLY)) < 0) {
515354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		perror("/dev/null");
516354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (errno);
517354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
518354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
519354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	/* 00/00/00/00 */
520354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	for (i = 0; i < maxNum; i++) {
521354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
522354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		r = random() % maxNum;
523354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
524354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		sprintf(fname, "00/%2.2x/%2.2x/00%2.2x%2.2x%2.2x",
525354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			((r >> 16) & 0xFF),
526354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			((r >> 8) & 0xFF),
527354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			((r >> 16) & 0xFF), ((r >> 8) & 0xFF), (r & 0xFF));
528354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
529354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		open_read_close(fname);
530354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
531354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	close(nullFileHandle);
532354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("Success:\t%d\nFail:\t%d\n", openlog[SUCCESS], openlog[FAIL]);
533354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return 0;
534e87db4bb965b58b73ce733cc3e32dd42101393d0mridge}
535e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
536e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint open_read_close(char *fname)
537e87db4bb965b58b73ce733cc3e32dd42101393d0mridge{
538354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int fileHandle, fileHandle2;
539354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	char buffer[BUFFSIZE];
540354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int c;
541354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
542354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((fileHandle = open(fname, O_RDONLY | O_SYNC | O_ASYNC)) < 0) {
543354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		openlog[FAIL]++;
544354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("ERROR:opening file %s failed %d \n", fname, errno);
545354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (errno);
546354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
547354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
548354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((fileHandle2 = open(fname, O_RDONLY | O_SYNC | O_ASYNC)) < 0) {
549354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		openlog[FAIL]++;
550354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("ERROR:2nd opening file %s failed %d \n", fname, errno);
551354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (errno);
552354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
553354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
554354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	openlog[SUCCESS]++;
555354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
556354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	while ((c = read(fileHandle, buffer, BUFFSIZE)) > 0) {
557354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if (write(nullFileHandle, buffer, c) < 0) {
558354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			perror("/dev/null");
559354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			printf("Opened\t %d\nUnopend:\t%d\n", openlog[SUCCESS],
560354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			       openlog[FAIL]);
561354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			close(fileHandle2);
562354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			close(fileHandle);
563354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			return (errno);
564354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		}
565354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		if ((c = read(fileHandle2, buffer, BUFFSIZE)) > 0) {
566354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			if (write(nullFileHandle, buffer, c) < 0) {
567354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				perror("/dev/null");
568354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				printf("Opened\t %d\nUnopend:\t%d\n",
569354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				       openlog[SUCCESS], openlog[FAIL]);
570354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				close(fileHandle2);
571354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				close(fileHandle);
572354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao				return (errno);
573354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			}
574354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		}
575354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
576354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
577354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (c < 0) {
578354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		perror(fname);
579354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("Opened\t %d\nUnopend:\t%d\n", openlog[SUCCESS],
580354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		       openlog[FAIL]);
581354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (errno);
582354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
583354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
584354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	close(fileHandle2);
585354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	close(fileHandle);
586354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return 0;
587e87db4bb965b58b73ce733cc3e32dd42101393d0mridge}
588e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
589e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint create_or_delete(char *fname)
590e87db4bb965b58b73ce733cc3e32dd42101393d0mridge{
591354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int r, rc;
592354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
593354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	r = (random() & 1);
594354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
595354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	/* create */
596354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((create_file(fname) == 0)) {
597354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		rc = delete_file(fname);
598354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
599354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("Error: %d creating random file \n", errno);
600354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
601354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
602354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if ((errorCount > dFileCount || errorCount > cFileCount)
603354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	    && (errorCount > MAXERROR)) {
604354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		fprintf(stderr, "Too many errors -- Aborting test\n");
605354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		fprintf(stderr, "Total create files: %d\n", cFileCount);
606354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		fprintf(stderr, "Total delete files: %d\n", dFileCount);
607354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		fprintf(stderr, "Total error       : %d\n", errorCount);
608354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (MAXERROR);
609354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
610354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
611354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return 0;
612e87db4bb965b58b73ce733cc3e32dd42101393d0mridge}
613e87db4bb965b58b73ce733cc3e32dd42101393d0mridge
614e87db4bb965b58b73ce733cc3e32dd42101393d0mridgeint do_random_create_delete(int maxNum)
615e87db4bb965b58b73ce733cc3e32dd42101393d0mridge{
616354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int r, rc = 0;
617354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	char fname[1024];
618354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	time_t t;
619354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int i;
620354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
621354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("Running random create/delete test...\n");
622354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
623354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (maxNum < 1 || maxNum > MAXNUM) {
624354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		printf("MAX out of size %d\n", maxNum);
625354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return (maxNum);
626354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
627354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
628354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	time(&t);
629354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	srandom((unsigned int)getpid() ^
630354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		(((unsigned int)t << 16) | (unsigned int)t >> 16));
631354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
632354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	/* 00/00/00/00 */
633354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	for (i = 0; i < maxNum && rc != MAXERROR; i++) {
634354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		r = random() % maxNum;
635354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		sprintf(fname, "00/%2.2x/%2.2x/00%2.2x%2.2x%2.2x",
636354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			((r >> 16) & 0xFF),
637354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			((r >> 8) & 0xFF),
638354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao			((r >> 16) & 0xFF), ((r >> 8) & 0xFF), (r & 0xFF));
639354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
640354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		rc = create_or_delete(fname);
641354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
642354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
643354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	fprintf(stderr, "Total create files: %d\n", cFileCount);
644354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	fprintf(stderr, "Total delete files: %d\n", dFileCount);
645354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	fprintf(stderr, "Total error       : %d\n", errorCount);
646354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return (rc);
647ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman}
648