aboutsummaryrefslogtreecommitdiffstats
path: root/fs/hugetlbfs/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/hugetlbfs/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/hugetlbfs/inode.c')
-rw-r--r--fs/hugetlbfs/inode.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
index a4e9a7ec3691..d5f019d48b09 100644
--- a/fs/hugetlbfs/inode.c
+++ b/fs/hugetlbfs/inode.c
@@ -448,19 +448,20 @@ static int hugetlbfs_setattr(struct dentry *dentry, struct iattr *attr)
448 448
449 error = inode_change_ok(inode, attr); 449 error = inode_change_ok(inode, attr);
450 if (error) 450 if (error)
451 goto out; 451 return error;
452 452
453 if (ia_valid & ATTR_SIZE) { 453 if (ia_valid & ATTR_SIZE) {
454 error = -EINVAL; 454 error = -EINVAL;
455 if (!(attr->ia_size & ~huge_page_mask(h))) 455 if (attr->ia_size & ~huge_page_mask(h))
456 error = hugetlb_vmtruncate(inode, attr->ia_size); 456 return -EINVAL;
457 error = hugetlb_vmtruncate(inode, attr->ia_size);
457 if (error) 458 if (error)
458 goto out; 459 return error;
459 attr->ia_valid &= ~ATTR_SIZE;
460 } 460 }
461 error = inode_setattr(inode, attr); 461
462out: 462 setattr_copy(inode, attr);
463 return error; 463 mark_inode_dirty(inode);
464 return 0;
464} 465}
465 466
466static struct inode *hugetlbfs_get_inode(struct super_block *sb, uid_t uid, 467static struct inode *hugetlbfs_get_inode(struct super_block *sb, uid_t uid,