|
@@ -1019,8 +1019,10 @@ static bool defrag_check_next_extent(struct inode *inode, struct extent_map *em)
|
|
|
return false;
|
|
|
|
|
|
next = defrag_lookup_extent(inode, em->start + em->len);
|
|
|
- if (!next || next->block_start >= EXTENT_MAP_LAST_BYTE ||
|
|
|
- (em->block_start + em->block_len == next->block_start))
|
|
|
+ if (!next || next->block_start >= EXTENT_MAP_LAST_BYTE)
|
|
|
+ ret = false;
|
|
|
+ else if ((em->block_start + em->block_len == next->block_start) &&
|
|
|
+ (em->block_len > 128 * 1024 && next->block_len > 128 * 1024))
|
|
|
ret = false;
|
|
|
|
|
|
free_extent_map(next);
|
|
@@ -1055,7 +1057,6 @@ static int should_defrag_range(struct inode *inode, u64 start, int thresh,
|
|
|
}
|
|
|
|
|
|
next_mergeable = defrag_check_next_extent(inode, em);
|
|
|
-
|
|
|
/*
|
|
|
* we hit a real extent, if it is big or the next extent is not a
|
|
|
* real extent, don't bother defragging it
|