@ -3085,8 +3085,10 @@ static ssize_t reiserfs_direct_IO(int rw, struct kiocb *iocb,
loff_t isize = i_size_read ( inode ) ;
loff_t end = offset + iov_length ( iov , nr_segs ) ;
if ( end > isize )
vmtruncate ( inode , isize ) ;
if ( ( end > isize ) & & inode_newsize_ok ( inode , isize ) = = 0 ) {
truncate_setsize ( inode , isize ) ;
reiserfs_vfs_truncate_file ( inode ) ;
}
}
return ret ;
@ -3200,8 +3202,13 @@ int reiserfs_setattr(struct dentry *dentry, struct iattr *attr)
*/
reiserfs_write_unlock_once ( inode - > i_sb , depth ) ;
if ( ( attr - > ia_valid & ATTR_SIZE ) & &
attr - > ia_size ! = i_size_read ( inode ) )
error = vmtruncate ( inode , attr - > ia_size ) ;
attr - > ia_size ! = i_size_read ( inode ) ) {
error = inode_newsize_ok ( inode , attr - > ia_size ) ;
if ( ! error ) {
truncate_setsize ( inode , attr - > ia_size ) ;
reiserfs_vfs_truncate_file ( inode ) ;
}
}
if ( ! error ) {
setattr_copy ( inode , attr ) ;