From 2f1fbd5011ef15fa3d1c95dc24dcc656a9aa9b5f Mon Sep 17 00:00:00 2001 From: charles Date: Sat, 16 Aug 2003 08:17:32 +0000 Subject: [PATCH] *** empty log message *** --- yaffs_fs.c | 135 ++++++++++++++++++++++++++++++++++++++++++++++++-- yaffs_guts.c | 30 +++++++++-- yaffsdev.proj | Bin 53248 -> 53248 bytes 3 files changed, 157 insertions(+), 8 deletions(-) diff --git a/yaffs_fs.c b/yaffs_fs.c index 6ef58ad..db59c23 100644 --- a/yaffs_fs.c +++ b/yaffs_fs.c @@ -22,12 +22,13 @@ * Acknowledgements: * * Luc van OostenRyck for numerous patches. * * Nick Bane for numerous patches. + * * Nick Bane for 2.5/2.6 integration. * * Andras Toth for mknod rdev issue. * * Some code bodily lifted from JFFS2. */ -const char *yaffs_fs_c_version = "$Id: yaffs_fs.c,v 1.26 2003-05-20 23:20:53 charles Exp $"; +const char *yaffs_fs_c_version = "$Id: yaffs_fs.c,v 1.27 2003-08-16 08:17:32 charles Exp $"; extern const char *yaffs_guts_c_version; @@ -44,7 +45,18 @@ extern const char *yaffs_guts_c_version; #include #include #include + + +#if defined(CONFIG_KERNEL_2_5) +#include /* Added NCB 15-8-2003 */ +#include +#define UnlockPage(p) unlock_page(p) +#define Page_Uptodate(page) test_bit(PG_uptodate, &(page)->flags) +#define kdevname(x) cdevname(to_kdev_t(x)) +#else #include +#endif + #include @@ -73,8 +85,13 @@ unsigned yaffs_traceMask = YAFFS_TRACE_ALWAYS | YAFFS_TRACE_BAD_BLOCKS; #define yaffs_InodeToObject(iptr) ((yaffs_Object *)((iptr)->u.generic_ip)) #define yaffs_DentryToObject(dptr) yaffs_InodeToObject((dptr)->d_inode) -#define yaffs_SuperToDevice(sb) ((yaffs_Device *)sb->u.generic_sbp) +//NCB #define yaffs_SuperToDevice(sb) ((yaffs_Device *)sb->u.generic_sbp) +#if defined(CONFIG_KERNEL_2_5) +#define yaffs_SuperToDevice(sb) ((yaffs_Device *)sb->s_fs_info) +#else +#define yaffs_SuperToDevice(sb) ((yaffs_Device *)sb->u.generic_sbp) +#endif static void yaffs_put_super(struct super_block *sb); @@ -87,19 +104,39 @@ static int yaffs_sync_object(struct file * file, struct dentry *dentry, int data static int yaffs_readdir(struct file *f, void *dirent, filldir_t filldir); +#if defined(CONFIG_KERNEL_2_5) /* Added NCB 185-8-2003 */ +static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *n); +static struct dentry * yaffs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *n); +#else static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode); static struct dentry * yaffs_lookup(struct inode *dir, struct dentry *dentry); +#endif static int yaffs_link(struct dentry *old_dentry, struct inode * dir, struct dentry * dentry); static int yaffs_unlink(struct inode * dir, struct dentry *dentry); static int yaffs_symlink(struct inode * dir, struct dentry *dentry, const char * symname); static int yaffs_mkdir(struct inode * dir, struct dentry * dentry, int mode); + +#if defined(CONFIG_KERNEL_2_5) +static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev); +#else static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode, int dev); +#endif static int yaffs_rename(struct inode * old_dir, struct dentry *old_dentry, struct inode * new_dir,struct dentry *new_dentry); static int yaffs_setattr(struct dentry *dentry, struct iattr *attr); +#if defined(CONFIG_KERNEL_2_5) /* Added NCB 185-8-2003 */ +static int yaffs_statfs(struct super_block *sb, struct kstatfs *buf); +#else static int yaffs_statfs(struct super_block *sb, struct statfs *buf); +#endif static void yaffs_read_inode (struct inode *inode); + +#if defined(CONFIG_KERNEL_2_5) +static struct super_block *yaffs_read_super(struct file_system_type * fs, int flags, const char *dev_name, void *data); +#else static struct super_block *yaffs_read_super(struct super_block * sb, void * data, int silent); +#endif + static void yaffs_put_inode (struct inode *inode); static void yaffs_delete_inode(struct inode *); static void yaffs_clear_inode(struct inode *); @@ -243,10 +280,14 @@ struct inode *yaffs_get_inode(struct super_block *sb, int mode, int dev,yaffs_Ob /* * Lookup is used to find objects in the fs */ +#if defined(CONFIG_KERNEL_2_5) /* Added NCB 185-8-2003 */ +static struct dentry * yaffs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *n) +#else static struct dentry * yaffs_lookup(struct inode *dir, struct dentry *dentry) +#endif { yaffs_Object *obj; - struct inode *inode; + struct inode *inode = NULL; // NCB 2.5/2.6 needs NULL here yaffs_Device *dev = yaffs_InodeToObject(dir)->myDev; @@ -271,6 +312,8 @@ static struct dentry * yaffs_lookup(struct inode *dir, struct dentry *dentry) if(inode) { T(YAFFS_TRACE_OS,(KERN_DEBUG"yaffs_loookup dentry \n")); +/* #if 0 asserted by NCB for 2.5/6 compatability - falls through to d_add even if NULL inode */ +#if 0 //dget(dentry); // try to solve directory bug d_add(dentry,inode); @@ -278,6 +321,7 @@ static struct dentry * yaffs_lookup(struct inode *dir, struct dentry *dentry) // return dentry; return NULL; +#endif } } @@ -287,6 +331,9 @@ static struct dentry * yaffs_lookup(struct inode *dir, struct dentry *dentry) } yaffs_GrossUnlock(dev); + +/* added NCB for 2.5/6 compatability - forces add even if inode is NULL which creates dentry hash*/ + d_add(dentry,inode); return NULL; // return (ERR_PTR(-EIO)); @@ -477,10 +524,20 @@ static void yaffs_FillInodeFromObject(struct inode *inode, yaffs_Object *obj) inode->i_gid = obj->st_gid; inode->i_blksize = inode->i_sb->s_blocksize; inode->i_blocks = 0; - inode->i_rdev = obj->st_rdev;; +#if defined(CONFIG_KERNEL_2_5) + inode->i_rdev = to_kdev_t(obj->st_rdev); + inode->i_atime.tv_sec = (time_t)(obj->st_atime); + inode->i_atime.tv_nsec = 0; + inode->i_mtime.tv_sec = (time_t)obj->st_mtime; + inode->i_mtime.tv_nsec =0; + inode->i_ctime.tv_sec = (time_t)obj->st_ctime; + inode->i_ctime.tv_nsec = 0; +#else + inode->i_rdev = obj->st_rdev; inode->i_atime = obj->st_atime; inode->i_mtime = obj->st_mtime; inode->i_ctime = obj->st_ctime; +#endif inode->i_size = yaffs_GetObjectFileLength(obj); inode->i_nlink = yaffs_GetObjectLinkCount(obj); @@ -490,7 +547,7 @@ 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, obj->st_rdev); + init_special_inode(inode, obj->st_mode,(dev_t)(obj->st_rdev)); break; case S_IFREG: // file inode->i_op = &yaffs_file_inode_operations; @@ -715,7 +772,11 @@ static int yaffs_readdir(struct file *f, void *dirent, filldir_t filldir) /* * File creation. Allocate an inode, and we're done.. */ +#if defined(CONFIG_KERNEL_2_5) +static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev) +#else static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode, int rdev) +#endif { struct inode *inode; @@ -798,7 +859,11 @@ static int yaffs_mkdir(struct inode * dir, struct dentry * dentry, int mode) return retVal; } +#if defined(CONFIG_KERNEL_2_5) /* Added NCB 185-8-2003 */ +static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *n) +#else static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode) +#endif { T(YAFFS_TRACE_OS,(KERN_DEBUG"yaffs_create\n")); return yaffs_mknod(dir, dentry, mode | S_IFREG, 0); @@ -1017,7 +1082,11 @@ static int yaffs_setattr(struct dentry *dentry, struct iattr *attr) return error; } +#if defined(CONFIG_KERNEL_2_5) /* Added NCB 185-8-2003 */ +static int yaffs_statfs(struct super_block *sb, struct kstatfs *buf) +#else 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")); @@ -1226,7 +1295,11 @@ static struct super_block *yaffs_internal_read_super(int useRam, struct super_bl // like it has the right capabilities // Set the yaffs_Device up for ram emulation +#if defined(CONFIG_KERNEL_2_5) + sb->s_fs_info = dev = kmalloc(sizeof(yaffs_Device),GFP_KERNEL); +#else sb->u.generic_sbp = dev = kmalloc(sizeof(yaffs_Device),GFP_KERNEL); +#endif if(!dev) { // Deep shit could not allocate device structure @@ -1280,6 +1353,10 @@ static struct super_block *yaffs_internal_read_super(int useRam, struct super_bl if (!inode) return NULL; + +// added NCB + inode->i_op = & yaffs_dir_inode_operations; + inode->i_fop = & yaffs_dir_operations; T(YAFFS_TRACE_OS,("yaffs_read_super: got root inode\n")); @@ -1298,7 +1375,35 @@ static struct super_block *yaffs_internal_read_super(int useRam, struct super_bl return sb; } +static int yaffs_internal_read_super_ram(struct super_block * sb, void * data, int silent) +{ + return yaffs_internal_read_super(1,sb,data,silent) ? 0 : -1; +} +static int yaffs_internal_read_super_mtd(struct super_block * sb, void * data, int silent) +{ + return yaffs_internal_read_super(0,sb,data,silent) ? 0 : -1; +} + + #ifdef CONFIG_YAFFS_MTD_ENABLED +#if defined(CONFIG_KERNEL_2_5) +static struct super_block *yaffs_read_super(struct file_system_type * fs, int flags, const char *dev_name, void *data) +{ + + return get_sb_bdev(fs, flags, dev_name, data, yaffs_internal_read_super_mtd); +} + +/* changes NCB 2.5.70 */ +//static DECLARE_FSTYPE(yaffs_fs_type, "yaffs", yaffs_read_super, FS_REQUIRES_DEV); +static struct file_system_type yaffs_fs_type = { + .owner = THIS_MODULE, + .name = "yaffs", + .get_sb = yaffs_read_super, +// .kill_sb = kill_block_super, + .kill_sb = kill_litter_super, + .fs_flags = FS_REQUIRES_DEV, +}; +#else static struct super_block *yaffs_read_super(struct super_block * sb, void * data, int silent) { return yaffs_internal_read_super(0,sb,data,silent); @@ -1306,15 +1411,35 @@ static struct super_block *yaffs_read_super(struct super_block * sb, void * data static DECLARE_FSTYPE(yaffs_fs_type, "yaffs", yaffs_read_super, FS_REQUIRES_DEV); #endif +#endif #ifdef CONFIG_YAFFS_RAM_ENABLED +#if defined(CONFIG_KERNEL_2_5) +static struct super_block *yaffs_ram_read_super(struct file_system_type * fs, int flags, const char *dev_name, void *data) +{ + + return get_sb_bdev(fs, flags, dev_name, data, yaffs_internal_read_super_ram); +} + +/* changes NCB 2.5.70 */ +//static DECLARE_FSTYPE(yaffs_fs_type, "yaffs", yaffs_read_super, FS_REQUIRES_DEV); +static struct file_system_type yaffs_fs_type = { + .owner = THIS_MODULE, + .name = "yaffsram", + .get_sb = yaffs_ram_read_super, +// .kill_sb = kill_block_super, + .kill_sb = kill_litter_super, + .fs_flags = FS_SINGLE, +}; +#else static struct super_block *yaffs_ram_read_super(struct super_block * sb, void * data, int silent) { return yaffs_internal_read_super(1,sb,data,silent); } static DECLARE_FSTYPE(yaffs_ram_fs_type, "yaffsram", yaffs_ram_read_super, FS_SINGLE); +#endif #endif // CONFIG_YAFFS_RAM_ENABLED diff --git a/yaffs_guts.c b/yaffs_guts.c index 133dd15..5cbd371 100644 --- a/yaffs_guts.c +++ b/yaffs_guts.c @@ -14,7 +14,7 @@ */ //yaffs_guts.c -const char *yaffs_guts_c_version="$Id: yaffs_guts.c,v 1.26 2003-05-20 23:20:53 charles Exp $"; +const char *yaffs_guts_c_version="$Id: yaffs_guts.c,v 1.27 2003-08-16 08:17:32 charles Exp $"; #include "yportenv.h" @@ -1625,7 +1625,12 @@ yaffs_Object *yaffs_CreateNewObject(yaffs_Device *dev,int number,yaffs_ObjectTyp theObject->win_ctime[1] = theObject->win_mtime[1] = theObject->win_atime[1]; #else - theObject->st_atime = theObject->st_mtime = theObject->st_ctime = CURRENT_TIME; + +#if defined(CONFIG_KERNEL_2_5) + theObject->st_atime = theObject->st_mtime = theObject->st_ctime = CURRENT_TIME.tv_sec; +#else + theObject->st_atime = theObject->st_mtime = theObject->st_ctime = CURRENT_TIME; +#endif #endif switch(type) { @@ -1728,8 +1733,12 @@ yaffs_Object *yaffs_MknodObject( yaffs_ObjectType type, in->win_ctime[0] = in->win_mtime[0] = in->win_atime[0]; in->win_ctime[1] = in->win_mtime[1] = in->win_atime[0]; +#else +#if defined(CONFIG_KERNEL_2_5) + in->st_atime = in->st_mtime = in->st_ctime = CURRENT_TIME.tv_sec; #else in->st_atime = in->st_mtime = in->st_ctime = CURRENT_TIME; +#endif in->st_rdev = rdev; in->st_uid = uid; in->st_gid = gid; @@ -3692,8 +3701,12 @@ int yaffs_FlushFile(yaffs_Object *in, int updateTime) { #ifdef CONFIG_YAFFS_WINCE yfsd_WinFileTimeNow(in->win_mtime); +#else +#if defined(CONFIG_KERNEL_2_5) + in->st_mtime = CURRENT_TIME.tv_sec; #else in->st_mtime = CURRENT_TIME; +#endif #endif } @@ -4546,9 +4559,15 @@ int yaffs_SetAttributes(yaffs_Object *obj, struct iattr *attr) if(valid & ATTR_UID) obj->st_uid = attr->ia_uid; if(valid & ATTR_GID) obj->st_gid = attr->ia_gid; +#if defined(CONFIG_KERNEL_2_5) + if(valid & ATTR_ATIME) obj->st_atime = attr->ia_atime.tv_sec; + if(valid & ATTR_CTIME) obj->st_ctime = attr->ia_ctime.tv_sec; + if(valid & ATTR_MTIME) obj->st_mtime = attr->ia_mtime.tv_sec; +#else if(valid & ATTR_ATIME) obj->st_atime = attr->ia_atime; if(valid & ATTR_CTIME) obj->st_ctime = attr->ia_ctime; if(valid & ATTR_MTIME) obj->st_mtime = attr->ia_mtime; +#endif if(valid & ATTR_SIZE) yaffs_ResizeFile(obj,attr->ia_size); @@ -4565,10 +4584,15 @@ int yaffs_GetAttributes(yaffs_Object *obj, struct iattr *attr) attr->ia_uid = obj->st_uid; valid |= ATTR_UID; attr->ia_gid = obj->st_gid; valid |= ATTR_GID; +#if defined(CONFIG_KERNEL_2_5) + attr->ia_atime.tv_sec = obj->st_atime; valid |= ATTR_ATIME; + attr->ia_ctime.tv_sec = obj->st_ctime; valid |= ATTR_CTIME; + attr->ia_mtime.tv_sec = obj->st_mtime; valid |= ATTR_MTIME; +#else attr->ia_atime = obj->st_atime; valid |= ATTR_ATIME; attr->ia_ctime = obj->st_ctime; valid |= ATTR_CTIME; attr->ia_mtime = obj->st_mtime; valid |= ATTR_MTIME; - +#endif attr->ia_size = yaffs_GetFileSize(obj); valid |= ATTR_SIZE; attr->ia_valid = valid; diff --git a/yaffsdev.proj b/yaffsdev.proj index 968816228bc6f770e3d929d6d03b7e6ee04d691d..28f3ae79b47f467b880b09d2e24900fb10805d8c 100644 GIT binary patch delta 703 zcmaKoU1-x#6vxx_rf#K)0~JPfa8wXYYtt_`x>oQ5L1avD4#k(4<|Z>XO+s#3S4wGp zlZi0R<8TxlKKSJ9i{kLn4+eq=K5aPg*{KM=2;z;K;6w4{{xA2O^ZWnL?R3MPZg{>J z8d)xF$}?Al^MWL#gdt(4@P*&xU-2*bhx{Vn;oH2+&&ArY8?o!LeGwsoxy#%o?hJQ= z%X3-o5VxC)aKF%Z^bLJNYiJd{Mo-XV)J2Qv4!Vt6XcjrhLZM-XSqodeyI0r4en=_x zUf_)#{=Mq^1JF=(oya;#sVT=Mo@}XQhS)V%)nwf;HNyDac--H3i~JSygP*&*>!f6eZ#J>&slbWVX9P@-&w5hObz?j9*mc&6$^rRvSH~q7?!8GmSW1T zreK*sQ<8|Mc!mnZb8D&xq~>U@TsCdB0-~R8#LvXvsTx=p7~zSP*;?&tDfKnpNUPAQa$Wd&nOH$0g*nrbK}xLB)0GdPRI7TxCW z&9v=G&4K2YN+MLTp&MEo!{q5xpxZ8FQ^%xHQ0=NiGnWn1@ERaWgHcHw+zx42Hr7D= tBSl(^_A9_~n4F%N2+aQ-Yr$0Tkr$!af*H-DD+DapKe=?c_jzeo;x~pu@Am)z delta 571 zcmZozz}&Ead4e^g>qeV*@#$%NlXxq6^LYJueR=hH^?3Psd3m4lJmopcvzKQ+&pe*V zJl#BXJO*q^Y!$3Itl6xQtRbu(tZuAUtQxFRtU|2ptgNixSw67bXSu_2jO7T+7M4vc z3t8r~Ol0X{X<=z%VU%EC_`uw>d1As{=E-(R0xa<lOLR8nLIc5+T^aB%e)N5`K3k4sqtxK7 z*}TLuT>}LpV+#Yz$zHRSWzEbKj7-cGj7=ZD^s8nvz+fP;J1FlwXpeGx>L*`s5Fbvbi -- 2.30.2