diff options
Diffstat (limited to 'fs/ext4/extents.c')
| -rw-r--r-- | fs/ext4/extents.c | 49 | 
1 files changed, 13 insertions, 36 deletions
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 35703dce23a3..e4115d338f10 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -3123,7 +3123,7 @@ void ext4_ext_release(struct super_block *sb)  #endif  } -static int ext4_zeroout_es(struct inode *inode, struct ext4_extent *ex) +static void ext4_zeroout_es(struct inode *inode, struct ext4_extent *ex)  {  	ext4_lblk_t  ee_block;  	ext4_fsblk_t ee_pblock; @@ -3134,10 +3134,10 @@ static int ext4_zeroout_es(struct inode *inode, struct ext4_extent *ex)  	ee_pblock = ext4_ext_pblock(ex);  	if (ee_len == 0) -		return 0; +		return; -	return ext4_es_insert_extent(inode, ee_block, ee_len, ee_pblock, -				     EXTENT_STATUS_WRITTEN); +	ext4_es_insert_extent(inode, ee_block, ee_len, ee_pblock, +			      EXTENT_STATUS_WRITTEN);  }  /* FIXME!! we need to try to merge to left or right after zero-out  */ @@ -3287,7 +3287,7 @@ static int ext4_split_extent_at(handle_t *handle,  			err = ext4_ext_dirty(handle, inode, path + path->p_depth);  			if (!err)  				/* update extent status tree */ -				err = ext4_zeroout_es(inode, &zero_ex); +				ext4_zeroout_es(inode, &zero_ex);  			/* If we failed at this point, we don't know in which  			 * state the extent tree exactly is so don't try to fix  			 * length of the original extent as it may do even more @@ -3640,9 +3640,8 @@ fallback:  out:  	/* If we have gotten a failure, don't zero out status tree */  	if (!err) { -		err = ext4_zeroout_es(inode, &zero_ex1); -		if (!err) -			err = ext4_zeroout_es(inode, &zero_ex2); +		ext4_zeroout_es(inode, &zero_ex1); +		ext4_zeroout_es(inode, &zero_ex2);  	}  	return err ? err : allocated;  } @@ -4403,15 +4402,8 @@ int ext4_ext_truncate(handle_t *handle, struct inode *inode)  	last_block = (inode->i_size + sb->s_blocksize - 1)  			>> EXT4_BLOCK_SIZE_BITS(sb); -retry: -	err = ext4_es_remove_extent(inode, last_block, -				    EXT_MAX_BLOCKS - last_block); -	if (err == -ENOMEM) { -		memalloc_retry_wait(GFP_ATOMIC); -		goto retry; -	} -	if (err) -		return err; +	ext4_es_remove_extent(inode, last_block, EXT_MAX_BLOCKS - last_block); +  retry_remove_space:  	err = ext4_ext_remove_space(inode, last_block, EXT_MAX_BLOCKS - 1);  	if (err == -ENOMEM) { @@ -5363,13 +5355,7 @@ static int ext4_collapse_range(struct file *file, loff_t offset, loff_t len)  	down_write(&EXT4_I(inode)->i_data_sem);  	ext4_discard_preallocations(inode, 0); - -	ret = ext4_es_remove_extent(inode, punch_start, -				    EXT_MAX_BLOCKS - punch_start); -	if (ret) { -		up_write(&EXT4_I(inode)->i_data_sem); -		goto out_stop; -	} +	ext4_es_remove_extent(inode, punch_start, EXT_MAX_BLOCKS - punch_start);  	ret = ext4_ext_remove_space(inode, punch_start, punch_stop - 1);  	if (ret) { @@ -5547,12 +5533,7 @@ static int ext4_insert_range(struct file *file, loff_t offset, loff_t len)  		ext4_free_ext_path(path);  	} -	ret = ext4_es_remove_extent(inode, offset_lblk, -			EXT_MAX_BLOCKS - offset_lblk); -	if (ret) { -		up_write(&EXT4_I(inode)->i_data_sem); -		goto out_stop; -	} +	ext4_es_remove_extent(inode, offset_lblk, EXT_MAX_BLOCKS - offset_lblk);  	/*  	 * if offset_lblk lies in a hole which is at start of file, use @@ -5610,12 +5591,8 @@ ext4_swap_extents(handle_t *handle, struct inode *inode1,  	BUG_ON(!inode_is_locked(inode1));  	BUG_ON(!inode_is_locked(inode2)); -	*erp = ext4_es_remove_extent(inode1, lblk1, count); -	if (unlikely(*erp)) -		return 0; -	*erp = ext4_es_remove_extent(inode2, lblk2, count); -	if (unlikely(*erp)) -		return 0; +	ext4_es_remove_extent(inode1, lblk1, count); +	ext4_es_remove_extent(inode2, lblk2, count);  	while (count) {  		struct ext4_extent *ex1, *ex2, tmp_ex;  |