aboutsummaryrefslogtreecommitdiffstats
path: root/fs/9p/vfs_inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/9p/vfs_inode.c')
-rw-r--r--fs/9p/vfs_inode.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
index c6cef2495f00..0afbbb450faf 100644
--- a/fs/9p/vfs_inode.c
+++ b/fs/9p/vfs_inode.c
@@ -971,6 +971,10 @@ static int v9fs_vfs_setattr(struct dentry *dentry, struct iattr *iattr)
971 struct p9_wstat wstat; 971 struct p9_wstat wstat;
972 972
973 P9_DPRINTK(P9_DEBUG_VFS, "\n"); 973 P9_DPRINTK(P9_DEBUG_VFS, "\n");
974 retval = inode_change_ok(dentry->d_inode, iattr);
975 if (retval)
976 return retval;
977
974 retval = -EPERM; 978 retval = -EPERM;
975 v9ses = v9fs_inode2v9ses(dentry->d_inode); 979 v9ses = v9fs_inode2v9ses(dentry->d_inode);
976 fid = v9fs_fid_lookup(dentry); 980 fid = v9fs_fid_lookup(dentry);
@@ -997,12 +1001,7 @@ static int v9fs_vfs_setattr(struct dentry *dentry, struct iattr *iattr)
997 if (iattr->ia_valid & ATTR_GID) 1001 if (iattr->ia_valid & ATTR_GID)
998 wstat.n_gid = iattr->ia_gid; 1002 wstat.n_gid = iattr->ia_gid;
999 } 1003 }
1000 if ((iattr->ia_valid & ATTR_SIZE) && 1004
1001 iattr->ia_size != i_size_read(dentry->d_inode)) {
1002 retval = vmtruncate(dentry->d_inode, iattr->ia_size);
1003 if (retval)
1004 return retval;
1005 }
1006 /* Write all dirty data */ 1005 /* Write all dirty data */
1007 if (S_ISREG(dentry->d_inode->i_mode)) 1006 if (S_ISREG(dentry->d_inode->i_mode))
1008 filemap_write_and_wait(dentry->d_inode->i_mapping); 1007 filemap_write_and_wait(dentry->d_inode->i_mapping);
@@ -1010,6 +1009,11 @@ static int v9fs_vfs_setattr(struct dentry *dentry, struct iattr *iattr)
1010 retval = p9_client_wstat(fid, &wstat); 1009 retval = p9_client_wstat(fid, &wstat);
1011 if (retval < 0) 1010 if (retval < 0)
1012 return retval; 1011 return retval;
1012
1013 if ((iattr->ia_valid & ATTR_SIZE) &&
1014 iattr->ia_size != i_size_read(dentry->d_inode))
1015 truncate_setsize(dentry->d_inode, iattr->ia_size);
1016
1013 v9fs_invalidate_inode_attr(dentry->d_inode); 1017 v9fs_invalidate_inode_attr(dentry->d_inode);
1014 1018
1015 setattr_copy(dentry->d_inode, iattr); 1019 setattr_copy(dentry->d_inode, iattr);