Fixes for 2.6 special inodes
[yaffs/.git] / yaffs_fs.c
index a00ef1bc275f86fd2ac0349143f18475e2bcb994..86a2559a41f8127b72acaae48c635d6705310412 100644 (file)
@@ -29,7 +29,7 @@
  */
 
 
-const char *yaffs_fs_c_version = "$Id: yaffs_fs.c,v 1.37 2005-01-06 23:28:34 charles Exp $";
+const char *yaffs_fs_c_version = "$Id: yaffs_fs.c,v 1.39 2005-04-24 08:54:36 charles Exp $";
 extern const char *yaffs_guts_c_version;
 
 
@@ -640,7 +640,11 @@ static void yaffs_FillInodeFromObject(struct inode *inode, yaffs_Object *obj)
                switch (obj->st_mode & S_IFMT) 
                {
                        default: // fifo, device or socket
-                               init_special_inode(inode, obj->st_mode,(dev_t)(obj->st_rdev));
+#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;
@@ -904,7 +908,11 @@ static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode, int r
                default:
                        // Special (socket, fifo, device...)
                        T(YAFFS_TRACE_OS,("yaffs_mknod: making special\n"));
-                       obj = yaffs_MknodSpecial(parent,dentry->d_name.name,mode,current->uid, current->gid,rdev);
+#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,("yaffs_mknod: making file\n"));
@@ -1323,6 +1331,7 @@ static struct super_block *yaffs_internal_read_super(int useRam, struct super_bl
                dev->nChunksPerBlock = YAFFS_CHUNKS_PER_BLOCK;
                dev->nBytesPerChunk = YAFFS_BYTES_PER_CHUNK;
                dev->nReservedBlocks = 5;
+               dev->nShortOpCaches = 10; // Enable short op caching
 
                dev->writeChunkToNAND = nandemul_WriteChunkToNAND;
                dev->readChunkFromNAND = nandemul_ReadChunkFromNAND;
@@ -1582,6 +1591,7 @@ static char * yaffs_dump_dev(char *buf,yaffs_Device *dev,char *name)
        buf +=sprintf(buf,"nUnlinkedFiles..... %d\n",dev->nUnlinkedFiles);
        buf +=sprintf(buf,"nBackgroudDeletions %d\n",dev->nBackgroundDeletions);
        buf +=sprintf(buf,"useNANDECC......... %d\n",dev->useNANDECC);
+       buf +=sprintf(buf,"nShortOpCaches..... %d\n",dev->nShortOpCaches);
 
        
        return buf;     
@@ -1712,3 +1722,4 @@ MODULE_DESCRIPTION("YAFFS - a NAND specific flash file system");
 MODULE_AUTHOR("Charles Manning, Aleph One Ltd., 2002");
 MODULE_LICENSE("GPL");
 
+