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 "yaffs_trace.h"
29 #include "nor_stress.h"
30 #include "yaffs_fsx.h"
32 void (*ext_fatal)(void);
36 int simulate_power_failure = 0;
45 int yaffs_test_maxMallocs;
47 extern int ops_multiplier;
49 char mount_point[200];
51 #define BASH_HANDLES 20
52 void yaffs_bash_around(const char *mountpt, int n_cycles)
67 sprintf(name,"%s/bashdir",mountpt);
69 yaffs_mkdir(name,0666);
71 for(i = 0; i < BASH_HANDLES; i++)
76 printf("CYCLE %8d mo %2d inodes %d space %d ",cycle,op_max,
77 yaffs_inodecount(mountpt),yaffs_freespace(mountpt));
78 for(i = 0; i < BASH_HANDLES; i++)
86 i = rand() % BASH_HANDLES;
88 pos = rand() & 20000000;
92 sprintf(name,"%s/bashdir/xx%d",mountpt,n);
93 sprintf(name1,"%s/bashdir/xx%d",mountpt,n1);
108 h[i] = yaffs_open(name,O_CREAT| O_RDWR, 0666);
114 yaffs_lseek(h[i],pos,SEEK_SET);
115 yaffs_write(h[i],name,n);
125 yaffs_rename(name,name1);
130 yaffs_mkdir(name,0666);
139 op_max = start_op-op;
147 printf("Usage: yaffs_test [options] mountpoint\n");
149 printf(" f: do fsx testing\n");
150 printf(" i: initialise for upgrade testing\n");
151 printf(" l: multiply number of operations by 5\n");
152 printf(" m: random max number of mallocs\n");
153 printf(" n nnn: number of cycles\n");
154 printf(" p: simulate power fail testing\n");
155 printf(" s sss: set seed\n");
156 printf(" u: do upgrade test\n");
157 printf(" b: bash-about test\n");
163 void test_fatal(void)
165 printf("fatal yaffs test pid %d sleeping\n",getpid());
171 signal(SIGSEGV,SIG_IGN);
172 signal(SIGBUS,SIG_IGN);
173 signal(SIGABRT,SIG_IGN);
178 void bad_ptr_handler(int sig)
180 printf("signal %d received\n",sig);
184 int main(int argc, char **argv)
187 int random_mallocs=0;
188 ext_fatal = test_fatal;
191 signal(SIGSEGV,bad_ptr_handler);
192 signal(SIGBUS,bad_ptr_handler);
193 signal(SIGABRT,bad_ptr_handler);
195 while ((ch = getopt(argc,argv, "bfilmn:ps:t:u"))
199 random_seed = atoi(optarg);
202 simulate_power_failure =1;
223 n_cycles = atoi(optarg);
226 yaffs_traceMask = strtol(optarg,NULL,0);
236 yaffs_test_maxMallocs = 0xFFF & random_seed;
240 strcpy(mount_point,argv[0]);
242 if(simulate_power_failure)
244 printf("Running test %s %s %s %s seed %d cycles %d\n",
245 do_upgrade ? "fw_upgrade" : "",
246 init_test ? "initialise":"",
248 simulate_power_failure ? "power_fail" : "",
249 random_seed, n_cycles);
252 yaffs_mount(mount_point);
253 printf("Mount complete\n");
255 if(do_upgrade && init_test){
256 simulate_power_failure = 0;
257 NorStressTestInitialise(mount_point);
258 } else if(do_upgrade){
259 printf("Running stress on %s with seed %d\n",mount_point,random_seed);
260 NorStressTestRun(mount_point,n_cycles,do_fsx);
262 yaffs_fsx_main(mount_point,n_cycles);
263 } else if(do_bash_around){
264 yaffs_bash_around(mount_point,n_cycles);
266 printf("No test to run!\n");
269 yaffs_unmount(mount_point);
271 printf("Test run completed!\n");