#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_traceMask;
-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);
}
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)
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_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 name[300];
int result = 0;
- int d,f;
+ int f;
// Make a 256 byte name
memset(name,0,sizeof(name));
void link_test0(const char *mountpt)
{
- int i;
char namea[300];
char nameb[300];
int result = 0;
void seek_overwrite_test(const char *mountpt,int nmounts)
{
-
+ static char xx[5000];
char a[30];
int i;
int h;
int result;
int val1;
- int valread;
yaffs_StartUp();
int h;
int result;
char val[1000];
- char valread[1000];
yaffs_StartUp();
list_xattr(name);
}
+
+
+void dump_dev_stats(yaffs_Device *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->nFreeChunks, dev->nErasedBlocks * dev->param.nChunksPerBlock,
+ dev->nPageReads, dev->nPageWrites, dev->nBlockErasures,
+ dev->allGCs, dev->passiveGCs, dev->oldestDirtyGCs, dev->nGCBlocks, dev->nGCCopies);
+}
+
+void test_flash_traffic(const char *mountpt)
+{
+ char name0[100];
+ char name1[100];
+ int i;
+ yaffs_Device *dev;
+
+ yaffs_traceMask = 0;
+
+ yaffs_StartUp();
+
+ 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_traceMask = 0;
+
+ yaffs_StartUp();
+
+ 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();
//basic_xattr_test("/yaffs2");
//big_xattr_test("/yaffs2");
- null_name_test("yaffs2");
+ //null_name_test("yaffs2");
+
+ test_flash_traffic("yaffs2");
+ link_follow_test("/yaffs2");
return 0;