diff options
Diffstat (limited to 'fs/9p/vfs_inode.c')
-rw-r--r-- | fs/9p/vfs_inode.c | 16 |
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); |