Commit 0ab9724b authored by Naohiro Aota's avatar Naohiro Aota Committed by David Sterba

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: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
Signed-off-by: default avatarNaohiro Aota <naohiro.aota@wdc.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent baba5062
...@@ -3711,6 +3711,30 @@ static void release_block_group(struct btrfs_block_group *block_group, ...@@ -3711,6 +3711,30 @@ static void release_block_group(struct btrfs_block_group *block_group,
btrfs_release_block_group(block_group, delalloc); 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 caller needs to re-search for free extent
* Return 0 means we have the needed 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, ...@@ -3737,11 +3761,7 @@ static int find_free_extent_update_loop(struct btrfs_fs_info *fs_info,
return 1; return 1;
if (ins->objectid) { if (ins->objectid) {
if (!use_cluster && last_ptr) { found_extent(ffe_ctl, ins);
spin_lock(&last_ptr->lock);
last_ptr->window_start = ins->objectid;
spin_unlock(&last_ptr->lock);
}
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment