*/
-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;
#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;
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 */
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);
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);