From cb6db8000bf9110fe422e80a78a0cae79ba48e73 Mon Sep 17 00:00:00 2001 From: charles Date: Tue, 7 Nov 2006 23:37:43 +0000 Subject: [PATCH] Add more test stuff --- direct/Makefile | 4 +++- direct/dtest.c | 51 ++++++++++++++++++++++++++--------------- direct/yaffs_fileem2k.c | 10 ++++++-- direct/yaffsfs.c | 10 ++++++-- direct/yaffsfs.h | 1 + 5 files changed, 52 insertions(+), 24 deletions(-) diff --git a/direct/Makefile b/direct/Makefile index e25fea4..fd5b13f 100644 --- a/direct/Makefile +++ b/direct/Makefile @@ -10,11 +10,13 @@ # # 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 diff --git a/direct/dtest.c b/direct/dtest.c index 07c8059..be4ed54 100644 --- a/direct/dtest.c +++ b/direct/dtest.c @@ -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); diff --git a/direct/yaffs_fileem2k.c b/direct/yaffs_fileem2k.c index 59d0c8e..8b4b461 100644 --- a/direct/yaffs_fileem2k.c +++ b/direct/yaffs_fileem2k.c @@ -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; } } diff --git a/direct/yaffsfs.c b/direct/yaffsfs.c index 9d7804c..9ad0895 100644 --- a/direct/yaffsfs.c +++ b/direct/yaffsfs.c @@ -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); diff --git a/direct/yaffsfs.h b/direct/yaffsfs.h index 0444d8f..c5e817b 100644 --- a/direct/yaffsfs.h +++ b/direct/yaffsfs.h @@ -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; -- 2.30.2