#include <string.h>
#include <unistd.h>
#include <fcntl.h>
+#include <time.h>
#include "yaffsfs.h"
+#include "yaffs_guts.h" /* Only for dumping device innards */
-void dumpDir(const char *dname);
+extern int yaffs_trace_mask;
-char xx[600];
+void dumpDir(const char *dname);
-void copy_in_a_file(char *yaffsName,char *inName)
+void copy_in_a_file(const char *yaffsName,const char *inName)
{
int inh,outh;
unsigned char buffer[100];
close(inh);
}
-void make_a_file(char *yaffsName,char bval,int sizeOfFile)
+void make_a_file(const char *yaffsName,char bval,int sizeOfFile)
{
int outh;
int i;
int h;
int n;
int result;
-
+ int iteration = 0;
char xx[200];
-
- int iterations = (syze + strlen(fn) -1)/ strlen(fn);
-
+
h = yaffs_open(fn, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
- while (iterations > 0)
+ while (syze > 0)
{
- sprintf(xx,"%s %8d",fn,iterations);
+ sprintf(xx,"%s %8d",fn,iteration);
n = strlen(xx);
result = yaffs_write(h,xx,n);
- if(result != n)
- printf("Wrote %d, should have been %d\n",result,n);
- iterations--;
+ if(result != n){
+ printf("Wrote %d, should have been %d. syze is %d\n",result,n,syze);
+ syze = 0;
+ } else
+ syze-=n;
+ iteration++;
}
yaffs_close (h);
}
{
char fn[100];
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(path);
yaffs_mount(path);
}
+void null_name_test(const char *path)
+{
+ char fn[100];
+ int h;
+ yaffs_start_up();
+
+ yaffs_mount(path);
+
+ sprintf(fn,"%s",path);
+
+ h = yaffs_open(fn,O_CREAT| O_TRUNC| O_RDWR, 0666);
+
+ printf("%d\n",h);
+
+}
+
char xxzz[2000];
int h;
int i;
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(path);
sprintf(fn,"%s/%s",path,"f1");
- yaffs_StartUp();
+ yaffs_start_up();
for(i = 0; i < niterations; i++)
{
printf("\n*****************\nIteration %d\n",i);
sprintf(fn[1],"%s/%s",path,"f1");
sprintf(fn[2],"%s/%s",path,"f2");
- yaffs_StartUp();
+ yaffs_start_up();
for(i = 0; i < niterations; i++)
{
int n;
int result;
int f;
-
+
+ static char xx[600];
char str[50];
for(n = 0; n < nfiles; n++)
}
}
-void leave_unlinked_file(char *path,int maxIterations,int siz)
+void leave_unlinked_file(const char *path,int maxIterations,int siz)
{
int i;
char str[50];
{
sprintf(str,"%s/%s",dname,de->d_name);
- yaffs_stat(str,&s);
+ yaffs_lstat(str,&s);
printf("%s ino %d length %d mode %X ",de->d_name,(int)s.st_ino,(int)s.st_size,s.st_mode);
switch(s.st_mode & S_IFMT)
mode_t temp_mode;
struct yaffs_stat ystat;
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount("/boot");
yaffs_mount("/data");
dumpDir("/boot");
// Check stat
- r = yaffs_stat("/boot/file with a long name",&ystat);
+ r = yaffs_lstat("/boot/file with a long name",&ystat);
// Check rename
// Check chmod
- yaffs_stat("/boot/yyfile",&ystat);
+ yaffs_lstat("/boot/yyfile",&ystat);
temp_mode = ystat.st_mode;
yaffs_chmod("/boot/yyfile",0x55555);
yaffs_unlink("/boot/zlf");
- yaffs_DumpDevStruct("/boot");
+ yaffs_dump_dev("/boot");
fill_disk_and_delete("/boot",20,20);
- yaffs_DumpDevStruct("/boot");
+ yaffs_dump_dev("/boot");
fill_files("/boot",1,10000,0);
fill_files("/boot",1,10000,5000);
leave_unlinked_file("/data",20000,5000);
leave_unlinked_file("/data",20000,5000);
- yaffs_DumpDevStruct("/boot");
- yaffs_DumpDevStruct("/data");
+ yaffs_dump_dev("/boot");
+ yaffs_dump_dev("/data");
char str[100];
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(path);
sprintf(b,"%s/b",mountpt);
sprintf(c,"%s/c",mountpt);
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(mountpt);
char abuffer[1000];
char bbuffer[1000];
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(path);
int j;
int a;
int b;
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(path);
{
struct yaffs_stat s;
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(path);
- yaffs_stat(path,&s);
+ yaffs_lstat(path,&s);
printf("root perms after mount %x\n",s.st_mode);
yaffs_chmod(path, 0777);
- yaffs_stat(path,&s);
+ yaffs_lstat(path,&s);
printf("root perms after setting to 0777 is %x\n",s.st_mode);
yaffs_unmount(path);
char bbuffer[1000];
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(path);
char abuffer[1000];
char bbuffer[1000];
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(path);
int directory_rename_test(void)
{
int r;
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount("/ram");
yaffs_mkdir("/ram/a",0);
int sizeOfFiles = 500000;
char buffer[100];
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount("/boot");
memset(buffer1,0,sizeof(buffer1));
memset(buffer2,0,sizeof(buffer2));
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount("/boot");
{
int f;
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount("/boot");
fill_disk("/boot/",2);
f = yaffs_freespace("/boot");
char y[10];
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount("/boot");
yaffs_unlink("/boot/trunctest");
void fill_disk_test(const char *mountpt)
{
int i;
- yaffs_StartUp();
+ yaffs_start_up();
for(i = 0; i < 5; i++)
{
void fill_files_test(const char *mountpt)
{
int i;
- yaffs_StartUp();
+ yaffs_start_up();
for(i = 0; i < 5; i++)
{
void fill_empty_files_test(const char *mountpt)
{
int i;
- yaffs_StartUp();
+ yaffs_start_up();
char name[100];
int result = 0;
void long_name_test(const char *mountpt)
{
int i;
- yaffs_StartUp();
+ yaffs_start_up();
char fullName[1000];
char name[300];
int result = 0;
- int d,f;
+ int f;
// Make a 256 byte name
memset(name,0,sizeof(name));
yaffs_DIR *d;
yaffs_dirent *de;
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(mountpt);
void link_test0(const char *mountpt)
{
- int i;
char namea[300];
char nameb[300];
int result = 0;
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(mountpt);
sprintf(b,"%s/bbb",mountpt);
sprintf(c,"%s/ccc",mountpt);
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(mountpt);
sprintf(a,"%s/aaa",mountpt);
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(mountpt);
int f3;
sprintf(a,"%s/aaa",mountpt);
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(mountpt);
sprintf(a,"%s/aaa",mountpt);
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(mountpt);
int h;
sprintf(sub,"%s/sdir",mountpt);
- yaffs_StartUp();
+ yaffs_start_up();
for(j = 0; j < 10; j++)
{
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(mountpt);
yaffs_unlink(a);
yaffs_unlink(b);
sprintf(a,"%s/a",mountpt);
- yaffs_StartUp();
+ yaffs_start_up();
for(i = 0; i < nmounts; i++){
int h0;
sprintf(a,"%s/a",mountpt);
- yaffs_StartUp();
+ yaffs_start_up();
sprintf(a,"%s/a",mountpt);
- yaffs_StartUp();
+ yaffs_start_up();
void seek_overwrite_test(const char *mountpt,int nmounts)
{
-
+ static char xx[5000];
char a[30];
int i;
sprintf(a,"%s/f",mountpt);
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(mountpt);
- yaffs_StartUp();
+ yaffs_start_up();
for(i = 0; i < nmounts; i++){
printf("############### Iteration %d Start\n",i);
printf("Create start condition\n");
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(mountpt);
yaffs_mkdir(a,0);
sprintf(b,"%s/zz",a);
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(mountpt);
int r;
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(mountpt);
void rmdir_test(const char *mountpt)
{
char name[100];
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(mountpt);
n = yaffs_getxattr(path,name,buffer,sizeof(buffer));
if(n >= 0){
- __u8 *b = (__u8 *)buffer;
+ u8 *b = (u8 *)buffer;
printf("%d bytes:",n);
if(n > 10)
int h;
int result;
int val1;
- int valread;
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(mountpt);
int h;
int result;
char val[1000];
- char valread[1000];
- yaffs_StartUp();
+ yaffs_start_up();
yaffs_mount(mountpt);
list_xattr(name);
}
+
+
+void dump_dev_stats(struct yaffs_dev *dev, const char * str)
+{
+ printf("%s\n",str);
+ printf( "space free %d erased %d "
+ "nand reads %d writes %d erases %d "
+ "gc all %d passive %d oldestdirty %d blocks %d copies %d \n",
+ dev->n_free_chunks, dev->n_erased_blocks * dev->param.chunks_per_block,
+ dev->n_page_reads, dev->n_page_writes, dev->n_erasures,
+ dev->all_gcs, dev->passive_gc_count, dev->oldest_dirty_gc_count, dev->n_gc_blocks, dev->n_gc_copies);
+}
+
+void test_flash_traffic(const char *mountpt)
+{
+ char name0[100];
+ char name1[100];
+ int i;
+ struct yaffs_dev *dev;
+
+ yaffs_trace_mask = 0;
+
+ yaffs_start_up();
+
+ yaffs_mount(mountpt);
+
+ dev = yaffs_getdev(mountpt);
+
+ strcpy(name0,mountpt);
+ strcat(name0,"/x");
+
+ strcpy(name1,mountpt);
+ strcat(name1,"/y");
+
+ dump_dev_stats(dev,"start");
+ create_file_of_size(name0,32 * 1024 * 1024);
+ dump_dev_stats(dev,"32MB written");
+ for(i = 0; i < 20; i++)
+ create_file_of_size(name1,1024 * 1024);
+ dump_dev_stats(dev,"20x 1MB files written");
+
+}
+
+void link_follow_test(const char *mountpt)
+{
+ char fn[100];
+ char sn[100];
+ char hn[100];
+ int result;
+ int h;
+
+ yaffs_trace_mask = 0;
+
+ yaffs_start_up();
+
+ yaffs_mount(mountpt);
+
+ sprintf(fn,"%s/file",mountpt);
+ sprintf(sn,"%s/sym",mountpt);
+ sprintf(hn,"%s/hl-sym",mountpt);
+ h = yaffs_open(fn,O_CREAT| O_RDWR, S_IREAD | S_IWRITE);
+ result = yaffs_close(h);
+
+ result = yaffs_symlink(fn,sn);
+ result = yaffs_link(sn,hn);
+
+ h =yaffs_open(hn,O_RDWR,0);
+
+}
int random_seed;
int simulate_power_failure;
//link_test("/flash/flash");
-
-
-
// cache_bypass_bug_test();
//free_space_check();
//check_resize_gc_bug("/flash");
- basic_xattr_test("/yaffs2");
- big_xattr_test("/yaffs2");
+ //basic_xattr_test("/yaffs2");
+ //big_xattr_test("/yaffs2");
+
+ //null_name_test("yaffs2");
+
+ test_flash_traffic("yaffs2");
+ link_follow_test("/yaffs2");
return 0;