|
@@ -3422,8 +3422,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);
|
|
|
}
|
|
|
}
|
|
|
|