diff options
Diffstat (limited to 'fs/udf/inode.c')
| -rw-r--r-- | fs/udf/inode.c | 13 | 
1 files changed, 4 insertions, 9 deletions
diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 2fb21c5ffccf..4726a4d014b6 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -1247,10 +1247,7 @@ int udf_setsize(struct inode *inode, loff_t newsize)  	if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||  	      S_ISLNK(inode->i_mode)))  		return -EINVAL; -	if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) -		return -EPERM; -	filemap_invalidate_lock(inode->i_mapping);  	iinfo = UDF_I(inode);  	if (newsize > inode->i_size) {  		if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) { @@ -1263,11 +1260,11 @@ int udf_setsize(struct inode *inode, loff_t newsize)  			}  			err = udf_expand_file_adinicb(inode);  			if (err) -				goto out_unlock; +				return err;  		}  		err = udf_extend_file(inode, newsize);  		if (err) -			goto out_unlock; +			return err;  set_size:  		truncate_setsize(inode, newsize);  	} else { @@ -1285,14 +1282,14 @@ set_size:  		err = block_truncate_page(inode->i_mapping, newsize,  					  udf_get_block);  		if (err) -			goto out_unlock; +			return err;  		truncate_setsize(inode, newsize);  		down_write(&iinfo->i_data_sem);  		udf_clear_extent_cache(inode);  		err = udf_truncate_extents(inode);  		up_write(&iinfo->i_data_sem);  		if (err) -			goto out_unlock; +			return err;  	}  update_time:  	inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode)); @@ -1300,8 +1297,6 @@ update_time:  		udf_sync_inode(inode);  	else  		mark_inode_dirty(inode); -out_unlock: -	filemap_invalidate_unlock(inode->i_mapping);  	return err;  }  |