mballoc: don't change cpa if cur_distance is equal to new_distance
PATCH 5/5 mballoc: don't change cpa if cur_distance is equal to new_distance
In ext4_mb_check_group_pa(), cur_distance is selected to return only when it's smaller than new_distance, this is unreasonable. If cur_distance is equal to new_distance, current code will return new_distance to update cpa from ext4_mb_use_preallocated(), which doesn't make any sense.
This patch makes new_distance to return only when it's smaller then cur_distance, which avoids unnecessary cpa update in ext4_mb_use_preallocated().
--- fs/ext4/mballoc.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
fs/ext4/mballoc.c +1 -1
@@ -3181,7 +3181,7 @@ ext4_mb_check_group_pa(ext4_fsblk_t goal_block, cur_distance =abs (goal_block - cpa->pa_pstart); new_distance =abs (goal_block - pa->pa_pstart); -if (cur_distance < new_distance) +if (cur_distance <= new_distance)return cpa;/* drop the previous reference */
Signature · 1 line
1.7.3.4
Ted Ts'o
maintainerAdded to the ext4 patch queue, albeit with a rewritten patch description.
- Ted
commit 5a54b2f199fdf19533f96c3e285b70c6729e1e4a
Author: Coly Li <[email protected]> Date: Thu Feb 24 14:10:05 2011 -0500
ext4: mballoc: don't replace the current preallocation group unnecessarily
In ext4_mb_check_group_pa(), the current preallocation space is replaced with a new preallocation space when the two have the same distance from the goal block.
This doesn't actually gain us anything, so change things so that the function only switches to the new preallocation group if its distance from the goal block is strictly smaller than the current preallocaiton group's distance from the goal block.