*** empty log message ***
[yaffs/.git] / yaffs_fs.c
index 6a2ddb3833f3c1ac20e80377a4cab92cc0ed7271..1a9460e85c10545e71caaf23024058bb4e408b06 100644 (file)
@@ -238,7 +238,7 @@ static void yaffs_put_inode(struct inode *inode)
 
 static int yaffs_readpage(struct file *f, struct page * pg)
 {
-       struct yaffs_Object *obj;
+       yaffs_Object *obj;
        unsigned char *pg_buf;  
        int ret;
        
@@ -255,7 +255,7 @@ static int yaffs_readpage(struct file *f, struct page * pg)
        pg_buf = kmap(pg);
        /* FIXME: Can kmap fail? */
 
-       ret = yaffs_ReadDataFromFile(obj,pg_buf, pg->index << PAGE_CACHE_SHIFT, PAGE_CACHE_SIZE);
+       ret = yaffs_ReadDataFromFile(obj, pg_buf, pg->index << PAGE_CACHE_SHIFT, PAGE_CACHE_SIZE);
 
        if(ret >= 0) ret = 0;
 
@@ -312,7 +312,7 @@ static void yaffs_FillInodeFromObject(struct inode *inode, yaffs_Object *obj)
                inode->i_gid = obj->st_gid;
                inode->i_blksize = YAFFS_BYTES_PER_CHUNK;
                inode->i_blocks = 0;
-               inode->i_rdev = NODEV;
+               inode->i_rdev = obj->st_rdev;;
                inode->i_atime = obj->st_atime;
                inode->i_mtime = obj->st_mtime;
                inode->i_ctime = obj->st_ctime;
@@ -324,8 +324,8 @@ static void yaffs_FillInodeFromObject(struct inode *inode, yaffs_Object *obj)
                
                switch (obj->st_mode & S_IFMT) 
                {
-                       default:
-                               //      init_special_inode(inode, mode, dev);
+                       default: // fifo, device or socket
+                               init_special_inode(inode, obj->st_mode, obj->st_rdev);
                                break;
                        case S_IFREG:   // file         
                                inode->i_op = &yaffs_file_inode_operations;
@@ -526,13 +526,15 @@ static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode, int d
                return -EPERM;
        }
        
-       T(("yaffs_mknod: making oject for %s, mode %x\n",
-                               dentry->d_name.name, mode));
+       T(("yaffs_mknod: making oject for %s, mode %x dev %x\n",
+                               dentry->d_name.name, mode,dev));
 
        switch (mode & S_IFMT) 
        {
                default:
-               
+                       // Special (socket, fifo, device...)
+                       T((KERN_DEBUG"yaffs_mknod: making special\n"));
+                       obj = yaffs_MknodSpecial(parent,dentry->d_name.name,mode,current->uid, current->gid,dev);
                        break;
                case S_IFREG:   // file         
                        T((KERN_DEBUG"yaffs_mknod: making file\n"));