2 * YAFFS: Yet another FFS. A NAND-flash specific file system.
4 * Copyright (C) 2002 Aleph One Ltd.
5 * for Toby Churchill Ltd and Brightstar Engineering
7 * Created by Charles Manning <charles@aleph1.co.uk>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
27 #include "nor_stress.h"
28 #include "yaffs_fsx.h"
30 void (*ext_fatal)(void);
34 int simulate_power_failure = 0;
43 int yaffs_test_maxMallocs;
45 extern int ops_multiplier;
47 char mount_point[200];
49 #define BASH_HANDLES 20
50 void yaffs_bash_around(const char *mountpt, int n_cycles)
65 sprintf(name,"%s/bashdir",mountpt);
67 yaffs_mkdir(name,0666);
69 for(i = 0; i < BASH_HANDLES; i++)
74 printf("CYCLE %8d mo %2d inodes %d space %d ",cycle,op_max,
75 yaffs_inodecount(mountpt),yaffs_freespace(mountpt));
76 for(i = 0; i < BASH_HANDLES; i++)
84 i = rand() % BASH_HANDLES;
86 pos = rand() & 20000000;
90 sprintf(name,"%s/bashdir/xx%d",mountpt,n);
91 sprintf(name1,"%s/bashdir/xx%d",mountpt,n1);
106 h[i] = yaffs_open(name,O_CREAT| O_RDWR, 0666);
112 yaffs_lseek(h[i],pos,SEEK_SET);
113 yaffs_write(h[i],name,n);
123 yaffs_rename(name,name1);
128 yaffs_mkdir(name,0666);
137 op_max = start_op-op;
145 printf("Usage: yaffs_test [options] mountpoint\n");
147 printf(" f: do fsx testing\n");
148 printf(" i: initialise for upgrade testing\n");
149 printf(" l: multiply number of operations by 5\n");
150 printf(" m: random max number of mallocs\n");
151 printf(" n nnn: number of cycles\n");
152 printf(" p: simulate power fail testing\n");
153 printf(" s sss: set seed\n");
154 printf(" u: do upgrade test\n");
155 printf(" b: bash-about test\n");
161 void test_fatal(void)
163 printf("fatal yaffs test pid %d sleeping\n",getpid());
169 signal(SIGSEGV,SIG_IGN);
170 signal(SIGBUS,SIG_IGN);
171 signal(SIGABRT,SIG_IGN);
176 void bad_ptr_handler(int sig)
178 printf("signal %d received\n",sig);
182 int main(int argc, char **argv)
185 int random_mallocs=0;
186 ext_fatal = test_fatal;
189 signal(SIGSEGV,bad_ptr_handler);
190 signal(SIGBUS,bad_ptr_handler);
191 signal(SIGABRT,bad_ptr_handler);
193 while ((ch = getopt(argc,argv, "bfilmn:ps:u"))
197 random_seed = atoi(optarg);
200 simulate_power_failure =1;
221 n_cycles = atoi(optarg);
231 yaffs_test_maxMallocs = 0xFFF & random_seed;
235 strcpy(mount_point,argv[0]);
237 if(simulate_power_failure)
239 printf("Running test %s %s %s %s seed %d cycles %d\n",
240 do_upgrade ? "fw_upgrade" : "",
241 init_test ? "initialise":"",
243 simulate_power_failure ? "power_fail" : "",
244 random_seed, n_cycles);
247 yaffs_mount(mount_point);
248 printf("Mount complete\n");
250 if(do_upgrade && init_test){
251 simulate_power_failure = 0;
252 NorStressTestInitialise(mount_point);
253 } else if(do_upgrade){
254 printf("Running stress on %s with seed %d\n",mount_point,random_seed);
255 NorStressTestRun(mount_point,n_cycles,do_fsx);
257 yaffs_fsx_main(mount_point,n_cycles);
258 } else if(do_bash_around){
259 yaffs_bash_around(mount_point,n_cycles);
261 printf("No test to run!\n");
264 yaffs_unmount(mount_point);
266 printf("Test run completed!\n");