yaffs: Tweak test scripts
[yaffs2.git] / direct / tests / nor_stress.c
index 033700ddeea3177d56a3d2f9066f8d7bf343dc77..349ecbe5adcfd3abe1eff201315293fe26290ea7 100644 (file)
@@ -1,3 +1,17 @@
+/*
+ * YAFFS: Yet another FFS. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2010 Aleph One Ltd.
+ *   for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
 #include "nor_stress.h"
 
 
@@ -27,6 +41,8 @@ do { \
 #endif
 
 
+void (*ext_fatal)(void) = NULL;
+
 static unsigned powerUps;
 static unsigned cycleStarts;
 static unsigned cycleEnds;
@@ -71,6 +87,9 @@ void MakeFullNames(const char *prefix)
 static void FatalError(int lineNo)
 {
   printf("Integrity error %d\n",lineNo);
+  if(ext_fatal)
+       ext_fatal();
+       
   while(1){
    sleep(1);
   }
@@ -113,12 +132,14 @@ static void UpdateCounter(const char *name, unsigned *val,  int initialise)
   
   FSX();
   outh = yaffs_open(fullTempCounterName, O_RDWR | O_TRUNC | O_CREAT, S_IREAD | S_IWRITE);
+  
   if(outh >= 0){
    struct yaffs_stat tmpstat, oldstat, tmpfstat;
    FSX(); 
+    yaffs_fstat(outh,&tmpfstat);
+    printf("\n\n\n*** Writing file %s inode %d\n",fullTempCounterName,tmpfstat.st_ino);
     nwritten = yaffs_write(outh,x,sizeof(x));
     FSX();
-    yaffs_fstat(outh,&tmpfstat);
     yaffs_close(outh);
     FSX();
 
@@ -152,6 +173,7 @@ static void dump_directory_tree_worker(const char *dname,int recursive)
        yaffs_dirent *de;
        struct yaffs_stat s;
        char str[1000];
+       int error_line = 0;
                        
        d = yaffs_opendir(dname);
        
@@ -172,7 +194,7 @@ static void dump_directory_tree_worker(const char *dname,int recursive)
                        printf("%s inode %ld %d obj %x length %d mode %X ",str, de->d_ino, s.st_ino,de->d_dont_use,(int)s.st_size,s.st_mode);\
                        if(de->d_ino != s.st_ino){
                                printf(" \n\n!!!! HEY inode mismatch\n\n");
-                               FatalError(__LINE__);
+                               error_line = __LINE__;
                        }
 
                        switch(s.st_mode & S_IFMT)
@@ -194,10 +216,13 @@ static void dump_directory_tree_worker(const char *dname,int recursive)
                                dump_directory_tree_worker(str,1);
                                
                         if(s.st_ino > 10000)
-                          FatalError(__LINE__);
+                          error_line = __LINE__;
                                                        
                }
                
+               if(error_line)
+                       FatalError(error_line);
+               
                yaffs_closedir(d);
        }
 
@@ -229,7 +254,7 @@ static int yWriteFile(const char *fname, unsigned sz32)
        FSX();
        h = yaffs_open(fname,O_RDWR | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
        yaffs_fstat(h,&st);
-       printf("Writing file %s inode %d\n",fname, st.st_ino);
+       printf("\n\n\n**** Open writing file %s inode %d\n",fname, st.st_ino);
        
        FSX();
 
@@ -266,6 +291,7 @@ static int yWriteFile(const char *fname, unsigned sz32)
        
        FSX();
        yaffs_close(h);
+       printf("File closed\n");
        return 0;
 
 WRITE_ERROR:
@@ -360,6 +386,7 @@ static void DoUpdateMainFile(void)
        FSX();
        if(result)
            FatalError(__LINE__);
+       printf("Raname file %s to %s\n",fullTempMainName,fullMainName);
        yaffs_rename(fullTempMainName,fullMainName);
        FSX();
 }
@@ -389,8 +416,10 @@ void NorStressTestInitialise(const char *prefix)
 
 void NorStressTestRun(const char *prefix, int n_cycles, int do_fsx)
 {
+
   interleave_fsx = do_fsx;
   MakeFullNames(prefix);
+  dump_directory_tree(fullPathName);
   FSX_INIT(prefix);
     
   dump_directory_tree(fullPathName);