Add more test stuff
authorcharles <charles>
Tue, 7 Nov 2006 23:37:43 +0000 (23:37 +0000)
committercharles <charles>
Tue, 7 Nov 2006 23:37:43 +0000 (23:37 +0000)
direct/Makefile
direct/dtest.c
direct/yaffs_fileem2k.c
direct/yaffsfs.c
direct/yaffsfs.h

index e25fea4..fd5b13f 100644 (file)
 #
 # NB Warning this Makefile does not include header dependencies.
 #
-# $Id: Makefile,v 1.12 2006-10-03 10:13:03 charles Exp $
+# $Id: Makefile,v 1.13 2006-11-07 23:37:43 charles Exp $
 
 #EXTRA_COMPILE_FLAGS = -DYAFFS_IGNORE_TAGS_ECC
 
 CFLAGS =    -Wall -DCONFIG_YAFFS_DIRECT -DCONFIG_YAFFS_SHORT_NAMES_IN_RAM -DCONFIG_YAFFS_YAFFS2 -g $(EXTRA_COMPILE_FLAGS) -DNO_Y_INLINE
+CFLAGS+=    -fstack-check -O0
+
 #CFLAGS+=   -Wshadow -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Wmissing-declarations
 #CFLAGS+=   -Wmissing-prototypes -Wredundant-decls -Wnested-externs -Winline
 
index 07c8059..be4ed54 100644 (file)
@@ -532,7 +532,7 @@ void dump_directory_tree_worker(const char *dname,int recursive)
        yaffs_DIR *d;
        yaffs_dirent *de;
        struct yaffs_stat s;
-       char str[100];
+       char str[1000];
                        
        d = yaffs_opendir(dname);
        
@@ -548,7 +548,7 @@ void dump_directory_tree_worker(const char *dname,int recursive)
                        
                        yaffs_lstat(str,&s);
                        
-                       printf("%s length %d mode %X ",str,(int)s.st_size,s.st_mode);
+                       printf("%s inode %d obj %x length %d mode %X ",str,s.st_ino,de->d_dont_use,(int)s.st_size,s.st_mode);
                        switch(s.st_mode & S_IFMT)
                        {
                                case S_IFREG: printf("data file"); break;
@@ -1735,29 +1735,42 @@ void multi_mount_test(const char *mountpt,int nmounts)
        int j;
        
        sprintf(a,"%s/a",mountpt);
-       
 
-       
-       
        yaffs_StartUp();
        
        for(i = 0; i < nmounts; i++){
+               int h0;
+               int h1;
+               static char xx[1000];
+               
                printf("############### Iteration %d   Start\n",i);
-               yaffs_mount(mountpt);
+               if(1 || i == 0 || i == 5) 
+                       yaffs_mount(mountpt);
+
                dump_directory_tree(mountpt);
+               
+               
                yaffs_mkdir(a,0);
-               for(j = 0; j < i; j++){
-                       sprintf(b,"%s/%d",a,j);
-                       verify_200k_file(b);
+               
+               sprintf(xx,"%s/0",a);
+               h0 = yaffs_open(xx, O_RDWR | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
+               
+               sprintf(xx,"%s/1",a);
+               h1 = yaffs_open(xx, O_RDWR | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
+               
+               for(j = 0; j < 200; j++){
+                  yaffs_write(h0,xx,1000);
+                  yaffs_write(h1,xx,1000);
                }
-               sprintf(b,"%s/%d",a,i);
-
-               write_200k_file(b,"","");
+               yaffs_truncate(h0,0);
+               yaffs_close(h0);
+               yaffs_close(h1);
                
-               printf("######## Iteration %d   End\n",i);
+               printf("########### %d\n",i);
                dump_directory_tree(mountpt);
-               
-               yaffs_unmount(mountpt);
+
+               if(1 || i == 4 || i == nmounts -1)
+                       yaffs_unmount(mountpt);
        }
 }
 
@@ -1934,7 +1947,7 @@ void huge_array_test(const char *mountpt,int n)
                        verify_file_of_size(a,10000000);
                }
                
-               printf("\n\n\ verification/deletion\n\n");
+               printf("\n\n verification/deletion\n\n");
                
                for(i = 0; i < fnum; i++){
                        sprintf(a,"%s/file%d",mountpt,i);
@@ -1943,7 +1956,7 @@ void huge_array_test(const char *mountpt,int n)
                        printf("deleting file %s\n",a);
                        yaffs_unlink(a);
                }
-               printf("\n\n\ done \n\n");
+               printf("\n\n done \n\n");
                        
                   
        }
@@ -1967,10 +1980,10 @@ int main(int argc, char *argv[])
         
         //scan_pattern_test("/flash",10000,10);
        //short_scan_test("/flash/flash",40000,200);
-        //multi_mount_test("/flash/flash",20);
+         multi_mount_test("/flash/flash",20);
         //checkpoint_fill_test("/flash/flash",20);
         //checkpoint_upgrade_test("/flash/flash",20);
-         huge_array_test("/flash/flash",10);
+        // huge_array_test("/flash/flash",10);
 
 
 
index 59d0c8e..8b4b461 100644 (file)
@@ -15,7 +15,7 @@
 // This provides a YAFFS nand emulation on a file for emulating 2kB pages.
 // THis is only intended as test code to test persistence etc.
 
-const char *yaffs_flashif_c_version = "$Id: yaffs_fileem2k.c,v 1.7 2006-10-13 08:52:49 charles Exp $";
+const char *yaffs_flashif_c_version = "$Id: yaffs_fileem2k.c,v 1.8 2006-11-07 23:37:43 charles Exp $";
 
 
 #include "yportenv.h"
@@ -32,7 +32,7 @@ const char *yaffs_flashif_c_version = "$Id: yaffs_fileem2k.c,v 1.7 2006-10-13 08
 #include "yaffs_fileem2k.h"
 #include "yaffs_packedtags2.h"
 
-
+//#define SIMULATE_FAILURES
 
 typedef struct 
 {
@@ -145,6 +145,8 @@ int yflash_WriteChunkWithTagsToNAND(yaffs_Device *dev,int chunkInNAND,const __u8
        int pos;
        int h;
        
+       T(YAFFS_TRACE_MTD,(TSTR("write chunk %d data %x tags %x" TENDSTR),chunkInNAND,(unsigned)data, (unsigned)tags));
+
        CheckInit();
        
        
@@ -213,6 +215,8 @@ int yflash_ReadChunkWithTagsFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *da
        int pos;
        int h;
        
+       T(YAFFS_TRACE_MTD,(TSTR("read chunk %d data %x tags %x" TENDSTR),chunkInNAND,(unsigned)data, (unsigned)tags));
+       
        CheckInit();
        
        
@@ -252,6 +256,7 @@ int yflash_ReadChunkWithTagsFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *da
                        yaffs_PackedTags2 pt;
                        nread= read(h,&pt,sizeof(pt));
                        yaffs_UnpackTags2(tags,&pt);
+#ifdef SIMULATE_FAILURES
                        if((chunkInNAND >> 6) == 300) {
                            if(fail300 && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR){
                               tags->eccResult = YAFFS_ECC_RESULT_FIXED;
@@ -265,6 +270,7 @@ int yflash_ReadChunkWithTagsFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *da
                               fail320 = 0;
                            }
                        }
+#endif
                        if(nread != sizeof(pt)) return YAFFS_FAIL;
                }
        }
index 9d7804c..9ad0895 100644 (file)
@@ -25,7 +25,7 @@
 #endif
 
 
-const char *yaffsfs_c_version="$Id: yaffsfs.c,v 1.13 2006-10-03 10:13:03 charles Exp $";
+const char *yaffsfs_c_version="$Id: yaffsfs.c,v 1.14 2006-11-07 23:37:43 charles Exp $";
 
 // configurationList is the list of devices that are supported
 static yaffsfs_DeviceConfiguration *yaffsfs_configurationList;
@@ -1302,8 +1302,14 @@ struct yaffs_dirent *yaffs_readdir(yaffs_DIR *dirp)
                yaffsfs_SetError(0);
                if(dsc->nextReturn){
                        dsc->de.d_ino = yaffs_GetEquivalentObject(dsc->nextReturn)->objectId;
+                       dsc->de.d_dont_use = (unsigned)dsc->nextReturn;
                        dsc->de.d_off = dsc->offset++;
-                       yaffs_GetObjectName(dsc->nextReturn,dsc->de.d_name,NAME_MAX+1);
+                       yaffs_GetObjectName(dsc->nextReturn,dsc->de.d_name,NAME_MAX);
+                       if(strlen(dsc->de.d_name) == 0)
+                       {
+                               // this should not happen!
+                               strcpy(dsc->de.d_name,"zz");
+                       }
                        dsc->de.d_reclen = sizeof(struct yaffs_dirent);
                        retVal = &dsc->de;
                        yaffsfs_DirAdvance(dsc);
index 0444d8f..c5e817b 100644 (file)
@@ -147,6 +147,7 @@ struct yaffs_dirent{
     off_t d_off;                /* offset to this dirent */
     unsigned short d_reclen;    /* length of this d_name */
     char d_name [NAME_MAX+1];   /* file name (null-terminated) */
+    unsigned d_dont_use;       /* debug pointer, not for public consumption */
 };
 
 typedef struct yaffs_dirent yaffs_dirent;