*/
-const char *yaffs_fs_c_version = "$Id: yaffs_fs.c,v 1.2 2005-03-16 04:00:36 charles Exp $";
+const char *yaffs_fs_c_version = "$Id: yaffs_fs.c,v 1.6 2005-07-03 10:32:40 charles Exp $";
extern const char *yaffs_guts_c_version;
yaffs_GrossLock(obj->myDev);
- nWritten = yaffs_WriteDataToFile(obj,buffer,page->index << PAGE_CACHE_SHIFT,nBytes);
+ nWritten = yaffs_WriteDataToFile(obj,buffer,page->index << PAGE_CACHE_SHIFT,nBytes,0);
yaffs_GrossUnlock(obj->myDev);
switch (obj->st_mode & S_IFMT)
{
default: // fifo, device or socket
- init_special_inode(inode, obj->st_mode,(dev_t)(obj->st_rdev));
- break;
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
+ init_special_inode(inode, obj->st_mode,old_decode_dev(obj->st_rdev));
+#else
+ init_special_inode(inode, obj->st_mode,(dev_t)(obj->st_rdev));
+#endif break;
case S_IFREG: // file
inode->i_op = &yaffs_file_inode_operations;
inode->i_fop = &yaffs_file_operations;
T(YAFFS_TRACE_OS,(KERN_DEBUG"yaffs_file_write about to write writing %d bytes to object %d at %d\n",n,obj->objectId,ipos));
}
- nWritten = yaffs_WriteDataToFile(obj,buf,ipos,n);
+ nWritten = yaffs_WriteDataToFile(obj,buf,ipos,n,0);
T(YAFFS_TRACE_OS,(KERN_DEBUG"yaffs_file_write writing %d bytes, %d written at %d\n",n,nWritten,ipos));
if(nWritten > 0)
default:
// Special (socket, fifo, device...)
T(YAFFS_TRACE_OS,(KERN_DEBUG"yaffs_mknod: making special\n"));
- obj = yaffs_MknodSpecial(parent,dentry->d_name.name,mode,current->uid, current->gid,rdev);
- break;
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
+ obj = yaffs_MknodSpecial(parent,dentry->d_name.name,mode,current->uid, current->gid,old_encode_dev(rdev));
+#else
+ obj = yaffs_MknodSpecial(parent,dentry->d_name.name,mode,current->uid, current->gid,rdev);
+#endif break;
case S_IFREG: // file
T(YAFFS_TRACE_OS,(KERN_DEBUG"yaffs_mknod: making file\n"));
obj = yaffs_MknodFile(parent,dentry->d_name.name,mode,current->uid, current->gid);
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);
.owner = THIS_MODULE,
.name = "yaffs",
.get_sb = yaffs_read_super,
-// .kill_sb = kill_block_super,
- .kill_sb = kill_litter_super,
+ .kill_sb = kill_block_super,
+// .kill_sb = kill_litter_super,
.fs_flags = FS_REQUIRES_DEV,
};
#else
.owner = THIS_MODULE,
.name = "yaffs2",
.get_sb = yaffs2_read_super,
-// .kill_sb = kill_block_super,
- .kill_sb = kill_litter_super,
+ .kill_sb = kill_block_super,
+// .kill_sb = kill_litter_super,
.fs_flags = FS_REQUIRES_DEV,
};
#else
.owner = THIS_MODULE,
.name = "yaffsram",
.get_sb = yaffs_ram_read_super,
-// .kill_sb = kill_block_super,
- .kill_sb = kill_litter_super,
+ .kill_sb = kill_block_super,
+// .kill_sb = kill_litter_super,
.fs_flags = FS_SINGLE,
};
#else
.owner = THIS_MODULE,
.name = "yaffs2ram",
.get_sb = yaffs2_ram_read_super,
-// .kill_sb = kill_block_super,
- .kill_sb = kill_litter_super,
+ .kill_sb = kill_block_super,
+// .kill_sb = kill_litter_super,
.fs_flags = FS_SINGLE,
};
#else
MODULE_AUTHOR("Charles Manning, Aleph One Ltd., 2002,2003,2004");
MODULE_LICENSE("GPL");
+