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