diff yaffs_fs.c @ 16:721e278c9eb3

Fix df size problem
author charles
date Fri, 29 Apr 2005 08:01:18 +0100
parents 0d6eaf1cfded
children d8f81b47435c
line wrap: on
line diff
--- a/yaffs_fs.c
+++ b/yaffs_fs.c
@@ -1212,20 +1212,35 @@ static int yaffs_statfs(struct super_blo
 static int yaffs_statfs(struct super_block *sb, struct statfs *buf)
 #endif
 {
+
+	
 	yaffs_Device *dev = yaffs_SuperToDevice(sb);
 	T(YAFFS_TRACE_OS,(KERN_DEBUG"yaffs_statfs\n"));
 
 	yaffs_GrossLock(dev);
 	
+	
 	buf->f_type = YAFFS_MAGIC;
 	buf->f_bsize = sb->s_blocksize;
 	buf->f_namelen = 255;
-	buf->f_blocks = (dev->endBlock - dev->startBlock + 1) * YAFFS_CHUNKS_PER_BLOCK/
-						(sb->s_blocksize/YAFFS_BYTES_PER_CHUNK);
+	if(sb->s_blocksize > dev->nBytesPerChunk)
+	{
+		
+		buf->f_blocks = (dev->endBlock - dev->startBlock + 1) * dev->nChunksPerBlock/
+						(sb->s_blocksize/dev->nBytesPerChunk);
+		buf->f_bfree = yaffs_GetNumberOfFreeChunks(dev)/
+						(sb->s_blocksize/dev->nBytesPerChunk);
+	}
+	else
+	{
+		
+		buf->f_blocks = (dev->endBlock - dev->startBlock + 1) * dev->nChunksPerBlock *
+						(dev->nBytesPerChunk/sb->s_blocksize);
+		buf->f_bfree = yaffs_GetNumberOfFreeChunks(dev) *
+						(dev->nBytesPerChunk/sb->s_blocksize);
+	}
 	buf->f_files = 0;
 	buf->f_ffree = 0;
-	buf->f_bfree = yaffs_GetNumberOfFreeChunks(dev)/
-						(sb->s_blocksize/YAFFS_BYTES_PER_CHUNK);
 	buf->f_bavail =  buf->f_bfree;
 	
 	yaffs_GrossUnlock(dev);