X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=yaffs_fs.c;h=8ef7da78edb5a84cc0f82adad3057136727edecc;hb=f40b8435a109889e57bc37743ac7eb6badf1dd95;hp=29c84089cb0a155aeffaca204f514bf258b2aee3;hpb=a1d28cf77fe06fe98cea4c4e80cc1cab94ea6736;p=yaffs%2F.git diff --git a/yaffs_fs.c b/yaffs_fs.c index 29c8408..8ef7da7 100644 --- a/yaffs_fs.c +++ b/yaffs_fs.c @@ -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");