static int yaffs_readpage(struct file *f, struct page * pg)
{
- struct yaffs_Object *obj;
+ yaffs_Object *obj;
unsigned char *pg_buf;
int ret;
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;
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;
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;
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"));