btrfs: factor out found_extent() for extent allocation
Factor out found_extent() from find_free_extent_update_loop(). This function is called when a proper extent is found and before returning from find_free_extent(). Hook functions like found_extent_clustered() should save information for a next allocation. Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
baba50624f
commit
0ab9724bf5
|
@ -3711,6 +3711,30 @@ static void release_block_group(struct btrfs_block_group *block_group,
|
|||
btrfs_release_block_group(block_group, delalloc);
|
||||
}
|
||||
|
||||
static void found_extent_clustered(struct find_free_extent_ctl *ffe_ctl,
|
||||
struct btrfs_key *ins)
|
||||
{
|
||||
struct btrfs_free_cluster *last_ptr = ffe_ctl->last_ptr;
|
||||
|
||||
if (!ffe_ctl->use_cluster && last_ptr) {
|
||||
spin_lock(&last_ptr->lock);
|
||||
last_ptr->window_start = ins->objectid;
|
||||
spin_unlock(&last_ptr->lock);
|
||||
}
|
||||
}
|
||||
|
||||
static void found_extent(struct find_free_extent_ctl *ffe_ctl,
|
||||
struct btrfs_key *ins)
|
||||
{
|
||||
switch (ffe_ctl->policy) {
|
||||
case BTRFS_EXTENT_ALLOC_CLUSTERED:
|
||||
found_extent_clustered(ffe_ctl, ins);
|
||||
break;
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Return >0 means caller needs to re-search for free extent
|
||||
* Return 0 means we have the needed free extent.
|
||||
|
@ -3737,11 +3761,7 @@ static int find_free_extent_update_loop(struct btrfs_fs_info *fs_info,
|
|||
return 1;
|
||||
|
||||
if (ins->objectid) {
|
||||
if (!use_cluster && last_ptr) {
|
||||
spin_lock(&last_ptr->lock);
|
||||
last_ptr->window_start = ins->objectid;
|
||||
spin_unlock(&last_ptr->lock);
|
||||
}
|
||||
found_extent(ffe_ctl, ins);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue