diff options
author | David Woodhouse <dwmw2@infradead.org> | 2008-02-25 15:20:50 +0000 |
---|---|---|
committer | David Woodhouse <dwmw2@infradead.org> | 2008-02-25 15:20:50 +0000 |
commit | b28ba9fa0154f78f3d36f5ae9a42f7bb01663cca (patch) | |
tree | aeaffaf6f8b108f82fa5004be8b0c7309ca6f55c /fs/jffs2/fs.c | |
parent | 66a10506d632051e1153e2555f4b2c820d427f64 (diff) | |
download | linux-b28ba9fa0154f78f3d36f5ae9a42f7bb01663cca.tar.gz linux-b28ba9fa0154f78f3d36f5ae9a42f7bb01663cca.tar.bz2 linux-b28ba9fa0154f78f3d36f5ae9a42f7bb01663cca.zip |
[JFFS2] Set i_blocks when truncating files
Addresses OLPC trac #6480
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Diffstat (limited to 'fs/jffs2/fs.c')
-rw-r--r-- | fs/jffs2/fs.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c index e26ea78c7892..3f49562dc508 100644 --- a/fs/jffs2/fs.c +++ b/fs/jffs2/fs.c @@ -149,6 +149,7 @@ int jffs2_do_setattr (struct inode *inode, struct iattr *iattr) if (ivalid & ATTR_SIZE && inode->i_size < iattr->ia_size) { jffs2_add_full_dnode_to_inode(c, f, new_metadata); inode->i_size = iattr->ia_size; + inode->i_blocks = (inode->i_size + 511) >> 9; f->metadata = NULL; } else { f->metadata = new_metadata; @@ -167,8 +168,10 @@ int jffs2_do_setattr (struct inode *inode, struct iattr *iattr) We are protected from a simultaneous write() extending i_size back past iattr->ia_size, because do_truncate() holds the generic inode semaphore. */ - if (ivalid & ATTR_SIZE && inode->i_size > iattr->ia_size) - vmtruncate(inode, iattr->ia_size); + if (ivalid & ATTR_SIZE && inode->i_size > iattr->ia_size) { + vmtruncate(inode, iattr->ia_size); + inode->i_blocks = (inode->i_size + 511) >> 9; + } return 0; } |