Btrfs: enforce metadata allocation clustering
The allocator uses the last allocation as a starting point for metadata allocations, and tries to allocate in clusters of at least 256k. If the search for a free block fails to find the expected block, this patch forces a new cluster to be found in the free list. Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
parent
771ed689d2
commit
3b7885bf96
@ -2195,6 +2195,23 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans,
|
|||||||
if (search_start + num_bytes > end)
|
if (search_start + num_bytes > end)
|
||||||
goto new_group;
|
goto new_group;
|
||||||
|
|
||||||
|
if (last_ptr && *last_ptr && search_start != *last_ptr) {
|
||||||
|
total_needed += empty_cluster;
|
||||||
|
*last_ptr = 0;
|
||||||
|
/*
|
||||||
|
* if search_start is still in this block group
|
||||||
|
* then we just re-search this block group
|
||||||
|
*/
|
||||||
|
if (search_start >= start &&
|
||||||
|
search_start < end) {
|
||||||
|
mutex_unlock(&block_group->alloc_mutex);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* else we go to the next block group */
|
||||||
|
goto new_group;
|
||||||
|
}
|
||||||
|
|
||||||
if (exclude_nr > 0 &&
|
if (exclude_nr > 0 &&
|
||||||
(search_start + num_bytes > exclude_start &&
|
(search_start + num_bytes > exclude_start &&
|
||||||
search_start < exclude_start + exclude_nr)) {
|
search_start < exclude_start + exclude_nr)) {
|
||||||
|
@ -2494,13 +2494,6 @@ retry:
|
|||||||
index = 0;
|
index = 0;
|
||||||
goto retry;
|
goto retry;
|
||||||
}
|
}
|
||||||
if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
|
|
||||||
mapping->writeback_index = index;
|
|
||||||
if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
|
|
||||||
range_whole = 1;
|
|
||||||
|
|
||||||
if (wbc->range_cont)
|
|
||||||
wbc->range_start = index << PAGE_CACHE_SHIFT;
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(extent_write_cache_pages);
|
EXPORT_SYMBOL(extent_write_cache_pages);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user