X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=fs%2Freiserfs%2Finode.c;h=36166443bc4533186f99e71fb66c577bda93b13c;hb=cc43a17507644ad34d07a3e95d7376d55fd82b15;hp=f844533792ee99d7c7191f070869d1462cea52ab;hpb=323226bbb3d865af12644d66df2b7f161adf51c7;p=firefly-linux-kernel-4.4.55.git diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c index f844533792ee..36166443bc45 100644 --- a/fs/reiserfs/inode.c +++ b/fs/reiserfs/inode.c @@ -3211,8 +3211,14 @@ int reiserfs_setattr(struct dentry *dentry, struct iattr *attr) attr->ia_size != i_size_read(inode)) { error = inode_newsize_ok(inode, attr->ia_size); if (!error) { + /* + * Could race against reiserfs_file_release + * if called from NFS, so take tailpack mutex. + */ + mutex_lock(&REISERFS_I(inode)->tailpack); truncate_setsize(inode, attr->ia_size); - reiserfs_vfs_truncate_file(inode); + reiserfs_truncate_file(inode, 1); + mutex_unlock(&REISERFS_I(inode)->tailpack); } }