*** empty log message ***
[yaffs2.git] / yaffs_fs.c
index 4ae8a6e9309fd207f8c60ef0f23f7a926e37513c..e4ea466b54365b4512502743c4437d36d2c098b5 100644 (file)
@@ -30,7 +30,7 @@
  */
 
 
-const char *yaffs_fs_c_version = "$Id: yaffs_fs.c,v 1.26 2005-08-01 21:02:22 luc Exp $";
+const char *yaffs_fs_c_version = "$Id: yaffs_fs.c,v 1.28 2005-08-09 03:52:23 charles Exp $";
 extern const char *yaffs_guts_c_version;
 
 
@@ -488,6 +488,7 @@ static int yaffs_writepage(struct page *page)
 #endif
 {
        struct address_space *mapping = page->mapping;
+       loff_t offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
        struct inode *inode;
        unsigned long end_index;
        char *buffer;
@@ -501,6 +502,14 @@ static int yaffs_writepage(struct page *page)
        if (!inode)
                BUG();
 
+       if (offset > inode->i_size)
+       {
+               T(YAFFS_TRACE_OS,(KERN_DEBUG"yaffs_writepage at %08x, inode size = %08x!!!\n", (unsigned)(page->index << PAGE_CACHE_SHIFT), (unsigned) inode->i_size));
+               T(YAFFS_TRACE_OS,(KERN_DEBUG"                -> don't care!!\n"));
+               unlock_page(page);
+               return 0;
+       }
+
        end_index = inode->i_size >> PAGE_CACHE_SHIFT;
 
        /* easy case */
@@ -525,9 +534,13 @@ static int yaffs_writepage(struct page *page)
        obj = yaffs_InodeToObject(inode);
        yaffs_GrossLock(obj->myDev);
 
+       T(YAFFS_TRACE_OS,(KERN_DEBUG"yaffs_writepage at %08x, size %08x\n", (unsigned)(page->index << PAGE_CACHE_SHIFT), nBytes));
+       T(YAFFS_TRACE_OS,(KERN_DEBUG"writepag0: obj = %05x, ino = %05x\n", (int) obj->variant.fileVariant.fileSize, (int) inode->i_size));
 
        nWritten = yaffs_WriteDataToFile(obj,buffer,page->index << PAGE_CACHE_SHIFT,nBytes,0);
 
+       T(YAFFS_TRACE_OS,(KERN_DEBUG"writepag1: obj = %05x, ino = %05x\n", (int) obj->variant.fileVariant.fileSize, (int) inode->i_size));
+
        yaffs_GrossUnlock(obj->myDev);
        
        kunmap(page);
@@ -1082,10 +1095,8 @@ static int yaffs_rename(struct inode * old_dir, struct dentry *old_dentry, struc
        else
        {
           
-               // Unlink the target if it exists
-               removed = yaffs_Unlink(yaffs_InodeToObject(new_dir),new_dentry->d_name.name);
-
-       
+               // Now does unlinking internally using shadowing mechanism
+               
                retVal =  yaffs_RenameObject(yaffs_InodeToObject(old_dir),old_dentry->d_name.name,
                                                                        yaffs_InodeToObject(new_dir),new_dentry->d_name.name);