Patch from Sergey Kubushyn [ksi@koi8.net]
[yaffs2.git] / yaffs_fs.c
index 574eda6f989522ab413314b6121e36cbe6f2f91b..14fd0b8d04906ad39a955fdf506a58f5c24af311 100644 (file)
@@ -31,7 +31,7 @@
  */
 
 const char *yaffs_fs_c_version =
-    "$Id: yaffs_fs.c,v 1.29 2005-08-11 01:07:43 marty Exp $";
+    "$Id: yaffs_fs.c,v 1.33 2005-10-27 22:24:04 marty Exp $";
 extern const char *yaffs_guts_c_version;
 
 #include <linux/config.h>
@@ -72,14 +72,11 @@ extern const char *yaffs_guts_c_version;
 #include "yportenv.h"
 #include "yaffs_guts.h"
 
-unsigned yaffs_traceMask = YAFFS_TRACE_ALWAYS | YAFFS_TRACE_BAD_BLOCKS;
-/*unsigned yaffs_traceMask = 0xFFFFFFFF; */
+unsigned yaffs_traceMask = YAFFS_TRACE_ALWAYS | YAFFS_TRACE_BAD_BLOCKS /* | 0xFFFFFFFF */; 
 
-#ifdef CONFIG_YAFFS_YAFFS1
 #include <linux/mtd/mtd.h>
 #include "yaffs_mtdif.h"
 #include "yaffs_mtdif2.h"
-#endif                         /*CONFIG_YAFFS_YAFFS1 */
 
 /*#define T(x) printk x */
 
@@ -607,9 +604,10 @@ static int yaffs_commit_write(struct file *f, struct page *pg, unsigned offset,
        }
 
        T(YAFFS_TRACE_OS,
-         (KERN_DEBUG "yaffs_commit_write returning %d\n", nWritten));
+         (KERN_DEBUG "yaffs_commit_write returning %d\n",
+          nWritten == nBytes ? 0 : -1));
 
-       return nWritten;
+       return nWritten == nBytes ? 0 : -1;
 
 }
 
@@ -1100,9 +1098,9 @@ static int yaffs_rename(struct inode *old_dir, struct dentry *old_dentry,
 {
        yaffs_Device *dev;
        int retVal = YAFFS_FAIL;
-       int removed = 0;
        yaffs_Object *target;
 
+        T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_rename\n"));
        dev = yaffs_InodeToObject(old_dir)->myDev;
 
        yaffs_GrossLock(dev);
@@ -1111,15 +1109,21 @@ static int yaffs_rename(struct inode *old_dir, struct dentry *old_dentry,
        target =
            yaffs_FindObjectByName(yaffs_InodeToObject(new_dir),
                                   new_dentry->d_name.name);
+       
+       
 
        if (target &&
            target->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
            !list_empty(&target->variant.directoryVariant.children)) {
+           
+               T(YAFFS_TRACE_OS, (KERN_DEBUG "target is non-empty dir\n"));
+
                retVal = YAFFS_FAIL;
        } else {
 
                /* Now does unlinking internally using shadowing mechanism */
-
+               T(YAFFS_TRACE_OS, (KERN_DEBUG "calling yaffs_RenameObject\n"));
+               
                retVal =
                    yaffs_RenameObject(yaffs_InodeToObject(old_dir),
                                       old_dentry->d_name.name,
@@ -1130,7 +1134,7 @@ static int yaffs_rename(struct inode *old_dir, struct dentry *old_dentry,
        yaffs_GrossUnlock(dev);
 
        if (retVal == YAFFS_OK) {
-               if (removed == YAFFS_OK) {
+               if(target) {
                        new_dentry->d_inode->i_nlink--;
                        mark_inode_dirty(new_dentry->d_inode);
                }
@@ -1248,7 +1252,6 @@ static void yaffs_put_super(struct super_block *sb)
        kfree(dev);
 }
 
-#ifdef CONFIG_YAFFS_YAFFS1
 
 static void yaffs_MTDPutSuper(struct super_block *sb)
 {
@@ -1262,7 +1265,6 @@ static void yaffs_MTDPutSuper(struct super_block *sb)
        put_mtd_device(mtd);
 }
 
-#endif
 
 static struct super_block *yaffs_internal_read_super(int yaffsVersion,
                                                     struct super_block *sb,
@@ -1486,13 +1488,12 @@ static struct super_block *yaffs_internal_read_super(int yaffsVersion,
        return sb;
 }
 
-#ifdef CONFIG_YAFFS_YAFFS1
 
 #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
 static int yaffs_internal_read_super_mtd(struct super_block *sb, void *data,
                                         int silent)
 {
-       return yaffs_internal_read_super(1, sb, data, silent) ? 0 : -1;
+       return yaffs_internal_read_super(1, sb, data, silent) ? 0 : -EINVAL;
 }
 
 static struct super_block *yaffs_read_super(struct file_system_type *fs,
@@ -1522,7 +1523,6 @@ static DECLARE_FSTYPE(yaffs_fs_type, "yaffs", yaffs_read_super,
                      FS_REQUIRES_DEV);
 #endif
 
-#endif                         /* CONFIG_YAFFS_YAFFS1 */
 
 #ifdef CONFIG_YAFFS_YAFFS2
 
@@ -1530,7 +1530,7 @@ static DECLARE_FSTYPE(yaffs_fs_type, "yaffs", yaffs_read_super,
 static int yaffs2_internal_read_super_mtd(struct super_block *sb, void *data,
                                          int silent)
 {
-       return yaffs_internal_read_super(2, sb, data, silent) ? 0 : -1;
+       return yaffs_internal_read_super(2, sb, data, silent) ? 0 : -EINVAL;
 }
 
 static struct super_block *yaffs2_read_super(struct file_system_type *fs,
@@ -1652,12 +1652,12 @@ struct file_system_to_install {
 };
 
 static struct file_system_to_install fs_to_install[] = {
-#ifdef CONFIG_YAFFS_YAFFS1
+//#ifdef CONFIG_YAFFS_YAFFS1
        {&yaffs_fs_type, 0},
-#endif
-#ifdef CONFIG_YAFFS_YAFFS2
+//#endif
+//#ifdef CONFIG_YAFFS_YAFFS2
        {&yaffs2_fs_type, 0},
-#endif
+//#endif
        {NULL, 0}
 };