*** empty log message ***
[yaffs/.git] / yaffs_fs.c
index 29c84089cb0a155aeffaca204f514bf258b2aee3..8ef7da78edb5a84cc0f82adad3057136727edecc 100644 (file)
@@ -1012,6 +1012,12 @@ static void yaffs_read_inode (struct inode *inode)
 }
 
 
+
+static yaffs_Device *yaffs_dev;
+static yaffs_Device *yaffsram_dev;
+
+
+
 static void yaffs_put_super(struct super_block *sb)
 {
        yaffs_Device *dev = yaffs_SuperToDevice(sb);
@@ -1023,7 +1029,10 @@ static void yaffs_put_super(struct super_block *sb)
        }
        yaffs_Deinitialise(dev);
        yaffs_GrossUnlock(dev);
-       
+
+       if(dev == yaffs_dev) yaffs_dev = NULL;
+       if(dev == yaffsram_dev) yaffsram_dev = NULL;
+               
        kfree(dev);
 }
 
@@ -1045,6 +1054,7 @@ static void  yaffs_MTDPutSuper(struct super_block *sb)
 
 #endif
 
+
 static struct super_block *yaffs_internal_read_super(int useRam, struct super_block * sb, void * data, int silent)
 {
        int nBlocks;
@@ -1106,6 +1116,8 @@ static struct super_block *yaffs_internal_read_super(int useRam, struct super_bl
                dev->readChunkFromNAND = nandemul_ReadChunkFromNAND;
                dev->eraseBlockInNAND = nandemul_EraseBlockInNAND;
                dev->initialiseNAND = nandemul_InitialiseNAND;
+
+               yaffsram_dev = dev;
                
 #endif
 
@@ -1185,8 +1197,11 @@ static struct super_block *yaffs_internal_read_super(int useRam, struct super_bl
                dev->readChunkFromNAND = nandmtd_ReadChunkFromNAND;
                dev->eraseBlockInNAND = nandmtd_EraseBlockInNAND;
                dev->initialiseNAND = nandmtd_InitialiseNAND;
-               
+                               
                dev->putSuperFunc = yaffs_MTDPutSuper;
+
+               yaffs_dev = dev;
+               
 #endif
        }
 
@@ -1246,6 +1261,33 @@ static DECLARE_FSTYPE(yaffs_ram_fs_type, "yaffsram", yaffs_ram_read_super, FS_SI
 static struct proc_dir_entry *my_proc_entry;
 static struct proc_dir_entry *my_proc_ram_write_entry;
 
+static char * yaffs_dump_dev(char *buf,yaffs_Device *dev,char *name)
+{
+       buf +=sprintf(buf,"\nDevice %s\n",name);
+       buf +=sprintf(buf,"startBlock......... %d\n",dev->startBlock);
+       buf +=sprintf(buf,"endBlock........... %d\n",dev->endBlock);
+       buf +=sprintf(buf,"chunkGroupBits..... %d\n",dev->chunkGroupBits);
+       buf +=sprintf(buf,"chunkGroupSize..... %d\n",dev->chunkGroupSize);
+       buf +=sprintf(buf,"nErasedBlocks...... %d\n",dev->nErasedBlocks);
+       buf +=sprintf(buf,"nTnodesCreated..... %d\n",dev->nTnodesCreated);
+       buf +=sprintf(buf,"nFreeTnodes........ %d\n",dev->nFreeTnodes);
+       buf +=sprintf(buf,"nObjectsCreated.... %d\n",dev->nObjectsCreated);
+       buf +=sprintf(buf,"nFreeObjects....... %d\n",dev->nFreeObjects);
+       buf +=sprintf(buf,"nFreeChunks........ %d\n",dev->nFreeChunks);
+       buf +=sprintf(buf,"nPageWrites........ %d\n",dev->nPageWrites);
+       buf +=sprintf(buf,"nPageReads......... %d\n",dev->nPageReads);
+       buf +=sprintf(buf,"nBlockErasures..... %d\n",dev->nBlockErasures);
+       buf +=sprintf(buf,"nGCCopies.......... %d\n",dev->nGCCopies);
+       buf +=sprintf(buf,"garbageCollections. %d\n",dev->garbageCollections);
+       buf +=sprintf(buf,"nRetriedWrites..... %d\n",dev->nRetriedWrites);
+       buf +=sprintf(buf,"nRetireBlocks...... %d\n",dev->nRetiredBlocks);
+       buf +=sprintf(buf,"cacheHits.......... %d\n",dev->cacheHits);
+       buf +=sprintf(buf,"nDeletedFiles...... %d\n",dev->nDeletedFiles);
+       buf +=sprintf(buf,"nUnlinkedFiles..... %d\n",dev->nUnlinkedFiles);
+       buf +=sprintf(buf,"nBackgroudDeletions %d\n",dev->nBackgroundDeletions);
+       
+       return buf;     
+}
 
 static int  yaffs_proc_read(
         char *page,
@@ -1257,15 +1299,18 @@ static int  yaffs_proc_read(
        )
 {
 
-       static char my_buffer[1000];
+       char my_buffer[2000];
+       char *buf;
+       buf = my_buffer;
 
        if (offset > 0) return 0;
 
        /* Fill the buffer and get its length */
-       sprintf( my_buffer, 
-               "YAFFS built:"__DATE__ " "__TIME__"\n"
-               
-       );
+       buf +=sprintf(buf,"YAFFS built:"__DATE__ " "__TIME__"\n");
+       
+       if(yaffs_dev) buf = yaffs_dump_dev(buf,yaffs_dev,"yaffs");
+       if(yaffsram_dev) buf = yaffs_dump_dev(buf,yaffsram_dev,"yaffsram");
+       
 
        strcpy(page,my_buffer);
        return strlen(my_buffer);
@@ -1290,6 +1335,8 @@ static int __init init_yaffs_fs(void)
 {
        int error = 0;
        
+       yaffs_dev = yaffsram_dev = NULL;
+       
        printk(KERN_DEBUG "yaffs " __DATE__ " " __TIME__ " Initialisation\n");
 #ifdef CONFIG_YAFFS_USE_GENERIC_RW
        printk(KERN_DEBUG "yaffs is using generic read/write (caching)\n");