X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=yaffs_fs.c;h=8034a066edd39f72414692656d60355cd360bdf6;hb=380068d8dfd26d7975fb356f9f5439282d17b4d6;hp=39de0740d28ae2d9743f5b019188574081c93bdd;hpb=7f0f2c68474e11183cfbaebfd7c21ba48228f05e;p=yaffs2.git diff --git a/yaffs_fs.c b/yaffs_fs.c index 39de074..8034a06 100644 --- a/yaffs_fs.c +++ b/yaffs_fs.c @@ -32,7 +32,7 @@ */ const char *yaffs_fs_c_version = - "$Id: yaffs_fs.c,v 1.91 2010-01-11 04:06:46 charles Exp $"; + "$Id: yaffs_fs.c,v 1.93 2010-02-10 03:54:08 charles Exp $"; extern const char *yaffs_guts_c_version; #include @@ -324,6 +324,17 @@ static const struct file_operations yaffs_file_operations = { }; #endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)) +static void zero_user_segment(struct page *page, unsigned start, unsigned end) +{ + void * kaddr = kmap_atomic(page, KM_USER0); + memset(kaddr + start, 0, end - start); + kunmap_atomic(kaddr, KM_USER0); + flush_dcache_page(page); +} +#endif + + static const struct inode_operations yaffs_file_inode_operations = { .setattr = yaffs_setattr, }; @@ -1651,14 +1662,20 @@ static int yaffs_rename(struct inode *old_dir, struct dentry *old_dentry, static int yaffs_setattr(struct dentry *dentry, struct iattr *attr) { struct inode *inode = dentry->d_inode; - int error; + int error = 0; yaffs_Device *dev; T(YAFFS_TRACE_OS, ("yaffs_setattr of object %d\n", yaffs_InodeToObject(inode)->objectId)); - error = inode_change_ok(inode, attr); + /* Fail if a requested resize >= 2GB */ + if (attr->ia_valid & ATTR_SIZE && + (attr->ia_size >> 31)) + error = -EINVAL; + + if (error == 0) + error = inode_change_ok(inode, attr); if (error == 0) { int result; if (!error){ @@ -1681,8 +1698,9 @@ static int yaffs_setattr(struct dentry *dentry, struct iattr *attr) yaffs_GrossUnlock(dev); } + T(YAFFS_TRACE_OS, - ("yaffs_setattr done\n")); + ("yaffs_setattr done returning %d\n",error)); return error; }