X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_fs.c;h=df0870d1afeb2d79765833944ce554774b2c5023;hp=5ff8f36bd335c3fcd3541d7608f5a3e0a09e991d;hb=2ae22f05374b4cb19202ddaac9fc47458c732f0d;hpb=d469be1af594bc4c67bb02c1c149489a32e62373 diff --git a/yaffs_fs.c b/yaffs_fs.c index 5ff8f36..df0870d 100644 --- a/yaffs_fs.c +++ b/yaffs_fs.c @@ -31,13 +31,15 @@ */ const char *yaffs_fs_c_version = - "$Id: yaffs_fs.c,v 1.54 2006-10-24 18:09:15 charles Exp $"; + "$Id: yaffs_fs.c,v 1.56 2007-01-19 04:07:48 charles Exp $"; extern const char *yaffs_guts_c_version; +#include +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) #include +#endif #include #include -#include #include #include #include @@ -89,7 +91,13 @@ unsigned yaffs_traceMask = YAFFS_TRACE_ALWAYS | /*#define T(x) printk x */ -#define yaffs_InodeToObject(iptr) ((yaffs_Object *)((iptr)->u.generic_ip)) +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)) +#define yaffs_InodeToObjectLV(iptr) (iptr)->i_private +#else +#define yaffs_InodeToObjectLV(iptr) (iptr)->u.generic_ip +#endif + +#define yaffs_InodeToObject(iptr) ((yaffs_Object *)(yaffs_InodeToObjectLV(iptr))) #define yaffs_DentryToObject(dptr) yaffs_InodeToObject((dptr)->d_inode) #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) @@ -189,8 +197,15 @@ static struct address_space_operations yaffs_file_address_operations = { }; static struct file_operations yaffs_file_operations = { +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)) + .read = do_sync_read, + .write = do_sync_write, + .aio_read = generic_file_aio_read, + .aio_write = generic_file_aio_write, +#else .read = generic_file_read, .write = generic_file_write, +#endif .mmap = generic_file_mmap, .flush = yaffs_file_flush, .fsync = yaffs_sync_object, @@ -408,7 +423,7 @@ static void yaffs_clear_inode(struct inode *inode) * the yaffs_Object. */ obj->myInode = NULL; - inode->u.generic_ip = NULL; + yaffs_InodeToObjectLV(inode) = NULL; /* If the object freeing was deferred, then the real * free happens now. @@ -704,7 +719,9 @@ static void yaffs_FillInodeFromObject(struct inode *inode, yaffs_Object * obj) inode->i_mode = obj->yst_mode; inode->i_uid = obj->yst_uid; inode->i_gid = obj->yst_gid; +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) inode->i_blksize = inode->i_sb->s_blocksize; +#endif #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) inode->i_rdev = old_decode_dev(obj->yst_rdev); @@ -756,7 +773,8 @@ static void yaffs_FillInodeFromObject(struct inode *inode, yaffs_Object * obj) break; } - inode->u.generic_ip = obj; + yaffs_InodeToObjectLV(inode) = obj; + obj->myInode = inode; } else { @@ -1322,7 +1340,7 @@ static int yaffs_statfs(struct super_block *sb, struct statfs *buf) } - +/** static int yaffs_do_sync_fs(struct super_block *sb) { @@ -1341,7 +1359,7 @@ static int yaffs_do_sync_fs(struct super_block *sb) } return 0; } - +**/ #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17)) static void yaffs_write_super(struct super_block *sb) @@ -1662,7 +1680,7 @@ static struct super_block *yaffs_internal_read_super(int yaffsVersion, #endif nBlocks = mtd->size / mtd->erasesize; - dev->nCheckpointReservedBlocks = 10; + dev->nCheckpointReservedBlocks = CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS; dev->startBlock = 0; dev->endBlock = nBlocks - 1; } else { @@ -1947,7 +1965,7 @@ static int yaffs_proc_write(struct file *file, const char *buf, char *end, *mask_name; int i; int done = 0; - int add, len; + int add, len = 0; int pos = 0; rg = yaffs_traceMask; @@ -2009,7 +2027,8 @@ static int yaffs_proc_write(struct file *file, const char *buf, } } - yaffs_traceMask = rg; + yaffs_traceMask = rg | YAFFS_TRACE_ALWAYS; + if (rg & YAFFS_TRACE_ALWAYS) { for (i = 0; mask_flags[i].mask_name != NULL; i++) { char flag;