aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4
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/ext4
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/ext4')
-rw-r--r--fs/ext4/inode.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 3da3c9646e5e..1fb390359bc5 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -5539,11 +5539,19 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)
5539 ext4_truncate(inode); 5539 ext4_truncate(inode);
5540 } 5540 }
5541 5541
5542 rc = inode_setattr(inode, attr); 5542 if ((attr->ia_valid & ATTR_SIZE) &&
5543 attr->ia_size != i_size_read(inode))
5544 rc = vmtruncate(inode, attr->ia_size);
5543 5545
5544 /* If inode_setattr's call to ext4_truncate failed to get a 5546 if (!rc) {
5545 * transaction handle at all, we need to clean up the in-core 5547 setattr_copy(inode, attr);
5546 * orphan list manually. */ 5548 mark_inode_dirty(inode);
5549 }
5550
5551 /*
5552 * If the call to ext4_truncate failed to get a transaction handle at
5553 * all, we need to clean up the in-core orphan list manually.
5554 */
5547 if (inode->i_nlink) 5555 if (inode->i_nlink)
5548 ext4_orphan_del(NULL, inode); 5556 ext4_orphan_del(NULL, inode);
5549 5557