aboutsummaryrefslogtreecommitdiffstats
path: root/fs/hostfs/hostfs_kern.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/hostfs/hostfs_kern.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/hostfs/hostfs_kern.c')
-rw-r--r--fs/hostfs/hostfs_kern.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c
index 87ac1891a185..7943ff11d489 100644
--- a/fs/hostfs/hostfs_kern.c
+++ b/fs/hostfs/hostfs_kern.c
@@ -849,13 +849,14 @@ int hostfs_permission(struct inode *ino, int desired)
849 849
850int hostfs_setattr(struct dentry *dentry, struct iattr *attr) 850int hostfs_setattr(struct dentry *dentry, struct iattr *attr)
851{ 851{
852 struct inode *inode = dentry->d_inode;
852 struct hostfs_iattr attrs; 853 struct hostfs_iattr attrs;
853 char *name; 854 char *name;
854 int err; 855 int err;
855 856
856 int fd = HOSTFS_I(dentry->d_inode)->fd; 857 int fd = HOSTFS_I(inode)->fd;
857 858
858 err = inode_change_ok(dentry->d_inode, attr); 859 err = inode_change_ok(inode, attr);
859 if (err) 860 if (err)
860 return err; 861 return err;
861 862
@@ -905,7 +906,18 @@ int hostfs_setattr(struct dentry *dentry, struct iattr *attr)
905 if (err) 906 if (err)
906 return err; 907 return err;
907 908
908 return inode_setattr(dentry->d_inode, attr); 909 if ((attr->ia_valid & ATTR_SIZE) &&
910 attr->ia_size != i_size_read(inode)) {
911 int error;
912
913 error = vmtruncate(inode, attr->ia_size);
914 if (err)
915 return err;
916 }
917
918 setattr_copy(inode, attr);
919 mark_inode_dirty(inode);
920 return 0;
909} 921}
910 922
911static const struct inode_operations hostfs_iops = { 923static const struct inode_operations hostfs_iops = {