}
+
+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);
}
yaffs_Deinitialise(dev);
yaffs_GrossUnlock(dev);
-
+
+ if(dev == yaffs_dev) yaffs_dev = NULL;
+ if(dev == yaffsram_dev) yaffsram_dev = NULL;
+
kfree(dev);
}
#endif
+
static struct super_block *yaffs_internal_read_super(int useRam, struct super_block * sb, void * data, int silent)
{
int nBlocks;
dev->readChunkFromNAND = nandemul_ReadChunkFromNAND;
dev->eraseBlockInNAND = nandemul_EraseBlockInNAND;
dev->initialiseNAND = nandemul_InitialiseNAND;
+
+ yaffsram_dev = dev;
#endif
dev->readChunkFromNAND = nandmtd_ReadChunkFromNAND;
dev->eraseBlockInNAND = nandmtd_EraseBlockInNAND;
dev->initialiseNAND = nandmtd_InitialiseNAND;
-
+
dev->putSuperFunc = yaffs_MTDPutSuper;
+
+ yaffs_dev = dev;
+
#endif
}
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,
)
{
- 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);
{
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");