[prev in list] [next in list] [prev in thread] [next in thread] 

List:       yaffs
Subject:    [Yaffs] Patches for special devices
From:       Alexis POLTI <polti () enst ! fr>
Date:       2005-03-02 20:03:29
Message-ID: 42261C11.9050800 () enst ! fr
[Download RAW message or body]

Hello !

   another patch for special file handling. I believe this corrects two things :
- creation of nodes with correct MAJOR and MINOR under linux kernel > 2.5
- deletion of special files (in yaffs_unlinkWorker. Not sure of this one... :/ ).

Regards,

Alexis

diff -pruN ../../../downloads/yaffs/yaffs_guts.c yaffs_guts.c
--- ../../../downloads/yaffs/yaffs_guts.c       2005-03-02 20:03:51.000000000 +0000
+++ yaffs_guts.c        2005-03-02 20:03:58.000000000 +0000
@@ -1828,7 +1828,7 @@ yaffs_Object *yaffs_MknodDirectory(yaffs

  yaffs_Object *yaffs_MknodSpecial(yaffs_Object *parent,const char *name, __u32 mode, \
__u32 uid, __u32 gid, __u32 rdev)  {
-       return yaffs_MknodObject(YAFFS_OBJECT_TYPE_DIRECTORY,parent,name,mode,uid,gid,NULL,NULL,rdev);
 +       return yaffs_MknodObject(YAFFS_OBJECT_TYPE_SPECIAL,parent,name,mode,uid,gid,NULL,NULL,rdev);
  }

  yaffs_Object *yaffs_MknodSymLink(yaffs_Object *parent,const char *name, __u32 mode, \
                __u32 uid, __u32 gid,const char 
*alias)
@@ -3967,6 +3967,7 @@ static int yaffs_UnlinkWorker(yaffs_Obje
                 switch(obj->variantType)
                 {
                         case YAFFS_OBJECT_TYPE_FILE:
+                       case YAFFS_OBJECT_TYPE_SPECIAL:
                                 return yaffs_UnlinkFile(obj);
                                 break;
                         case YAFFS_OBJECT_TYPE_DIRECTORY:


*************************

diff -pruN ../../../downloads/yaffs/yaffs_fs.c yaffs_fs.c
--- ../../../downloads/yaffs/yaffs_fs.c 2005-02-03 16:08:47.000000000 +0000
+++ yaffs_fs.c  2005-03-02 19:47:20.000000000 +0000
@@ -640,7 +640,11 @@ static void yaffs_FillInodeFromObject(st
                 switch (obj->st_mode & S_IFMT)
                 {
                         default: // fifo, device or socket
+#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
                 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"));


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic