aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext3/inode.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2010-06-04 05:30:02 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2010-08-09 16:47:37 -0400
commit1025774ce411f2bd4b059ad7b53f0003569b74fa (patch)
tree2be221c205cb5579652a6063e8ee27d1c72d1bbd /fs/ext3/inode.c
parenteef2380c187890816b73b1a4cb89a09203759469 (diff)
remove inode_setattr
Replace inode_setattr with opencoded variants of it in all callers. This moves the remaining call to vmtruncate into the filesystem methods where it can be replaced with the proper truncate sequence. In a few cases it was obvious that we would never end up calling vmtruncate so it was left out in the opencoded variant: spufs: explicitly checks for ATTR_SIZE earlier btrfs,hugetlbfs,logfs,dlmfs: explicitly clears ATTR_SIZE earlier ufs: contains an opencoded simple_seattr + truncate that sets the filesize just above In addition to that ncpfs called inode_setattr with handcrafted iattrs, which allowed to trim down the opencoded variant. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/ext3/inode.c')
-rw-r--r--fs/ext3/inode.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c
index 5c6f07eefa4..b04d1193668 100644
--- a/fs/ext3/inode.c
+++ b/fs/ext3/inode.c
@@ -3208,9 +3208,17 @@ int ext3_setattr(struct dentry *dentry, struct iattr *attr)
3208 ext3_journal_stop(handle); 3208 ext3_journal_stop(handle);
3209 } 3209 }
3210 3210
3211 rc = inode_setattr(inode, attr); 3211 if ((attr->ia_valid & ATTR_SIZE) &&
3212 attr->ia_size != i_size_read(inode)) {
3213 rc = vmtruncate(inode, attr->ia_size);
3214 if (rc)
3215 goto err_out;
3216 }
3217
3218 setattr_copy(inode, attr);
3219 mark_inode_dirty(inode);
3212 3220
3213 if (!rc && (ia_valid & ATTR_MODE)) 3221 if (ia_valid & ATTR_MODE)
3214 rc = ext3_acl_chmod(inode); 3222 rc = ext3_acl_chmod(inode);
3215 3223
3216err_out: 3224err_out: