normalise licence headers and attributions
[yaffs2.git] / yaffs_fs.c
index 368e6579cd630146f9954f4bffe08e68d1cfa345..57a8c108b7eba87b3776d526076dd634a0523b92 100644 (file)
@@ -1,15 +1,25 @@
 /*
- * YAFFS: Yet another FFS. A NAND-flash specific file system.
- * yaffs_fs.c
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
  *
- * Copyright (C) 2002 Aleph One Ltd.
+ * Copyright (C) 2002-2007 Aleph One Ltd.
  *   for Toby Churchill Ltd and Brightstar Engineering
  *
  * Created by Charles Manning <charles@aleph1.co.uk>
+ * 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.
+ * Michael Fischer for finding the problem with inode inconsistency.
+ * Some code bodily lifted from JFFS
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
+ *
+ */
+
+/*
  *
  * This is the file system front-end to YAFFS that hooks it up to
  * the VFS.
  * >> 2.6: sb->s_fs_info  points to the yaffs_Device associated with this
  *         superblock
  * >> inode->u.generic_ip points to the associated yaffs_Object.
- *
- * 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.
- * * Michael Fischer for finding the problem with inode inconsistency.
- * * Some code bodily lifted from JFFS2.
  */
 
 const char *yaffs_fs_c_version =
-    "$Id: yaffs_fs.c,v 1.55 2006-12-19 21:33:41 charles Exp $";
+    "$Id: yaffs_fs.c,v 1.57 2007-02-12 16:55:25 wookey Exp $";
 extern const char *yaffs_guts_c_version;
 
+#include <linux/version.h>
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
 #include <linux/config.h>
+#endif
 #include <linux/kernel.h>
 #include <linux/module.h>
-#include <linux/version.h>
 #include <linux/slab.h>
 #include <linux/init.h>
 #include <linux/list.h>
@@ -89,7 +93,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 +199,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 +425,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 +721,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 +775,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 +1342,7 @@ static int yaffs_statfs(struct super_block *sb, struct statfs *buf)
 }
 
 
-
+/**
 static int yaffs_do_sync_fs(struct super_block *sb)
 {
 
@@ -1341,7 +1361,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)
@@ -1947,7 +1967,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;