When a file is extended with truncate(), the call to inode_setattr() in yaffs_setattr()
call vmtruncate() which itself call a bunches of yaffs_writepage().
There we must NOT fill page whit index greater that the one given by the inode
'cos these pages refers to parts of the file which doesn't physically exists.
-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.27 2005-08-04 22:47:36 luc Exp $";
extern const char *yaffs_guts_c_version;
extern const char *yaffs_guts_c_version;
#endif
{
struct address_space *mapping = page->mapping;
#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;
struct inode *inode;
unsigned long end_index;
char *buffer;
+ 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 */
end_index = inode->i_size >> PAGE_CACHE_SHIFT;
/* easy case */
obj = yaffs_InodeToObject(inode);
yaffs_GrossLock(obj->myDev);
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);
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);
yaffs_GrossUnlock(obj->myDev);
kunmap(page);