btrfs: move hint_byte into find_free_extent_ctl
authorNaohiro Aota <naohiro.aota@wdc.com>
Tue, 25 Feb 2020 03:56:17 +0000 (12:56 +0900)
committerDavid Sterba <dsterba@suse.com>
Mon, 23 Mar 2020 16:01:49 +0000 (17:01 +0100)
This commit moves hint_byte into find_free_extent_ctl, so that we can
modify the hint_byte in the other functions. This will help us split
find_free_extent further. This commit also renames the function argument
"hint_byte" to "hint_byte_orig" to avoid misuse.

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>
fs/btrfs/extent-tree.c

index bd0d13661ea779706b78de7f7f5dac75fe2d1ef7..4f68291d03eaa9fa706eab394bf4d3b68e5547a3 100644 (file)
@@ -3483,6 +3483,9 @@ struct find_free_extent_ctl {
        /* Found result */
        u64 found_offset;
 
+       /* Hint where to start looking for an empty space */
+       u64 hint_byte;
+
        /* Allocation policy */
        enum btrfs_extent_allocation_policy policy;
 };
@@ -3797,7 +3800,7 @@ static int find_free_extent_update_loop(struct btrfs_fs_info *fs_info,
  */
 static noinline int find_free_extent(struct btrfs_fs_info *fs_info,
                                u64 ram_bytes, u64 num_bytes, u64 empty_size,
-                               u64 hint_byte, struct btrfs_key *ins,
+                               u64 hint_byte_orig, struct btrfs_key *ins,
                                u64 flags, int delalloc)
 {
        int ret = 0;
@@ -3822,6 +3825,7 @@ static noinline int find_free_extent(struct btrfs_fs_info *fs_info,
        ffe_ctl.have_caching_bg = false;
        ffe_ctl.orig_have_caching_bg = false;
        ffe_ctl.found_offset = 0;
+       ffe_ctl.hint_byte = hint_byte_orig;
        ffe_ctl.policy = BTRFS_EXTENT_ALLOC_CLUSTERED;
 
        ins->type = BTRFS_EXTENT_ITEM_KEY;
@@ -3864,14 +3868,14 @@ static noinline int find_free_extent(struct btrfs_fs_info *fs_info,
        if (last_ptr) {
                spin_lock(&last_ptr->lock);
                if (last_ptr->block_group)
-                       hint_byte = last_ptr->window_start;
+                       ffe_ctl.hint_byte = last_ptr->window_start;
                if (last_ptr->fragmented) {
                        /*
                         * We still set window_start so we can keep track of the
                         * last place we found an allocation to try and save
                         * some time.
                         */
-                       hint_byte = last_ptr->window_start;
+                       ffe_ctl.hint_byte = last_ptr->window_start;
                        use_cluster = false;
                }
                spin_unlock(&last_ptr->lock);
@@ -3879,8 +3883,8 @@ static noinline int find_free_extent(struct btrfs_fs_info *fs_info,
 
        ffe_ctl.search_start = max(ffe_ctl.search_start,
                                   first_logical_byte(fs_info, 0));
-       ffe_ctl.search_start = max(ffe_ctl.search_start, hint_byte);
-       if (ffe_ctl.search_start == hint_byte) {
+       ffe_ctl.search_start = max(ffe_ctl.search_start, ffe_ctl.hint_byte);
+       if (ffe_ctl.search_start == ffe_ctl.hint_byte) {
                block_group = btrfs_lookup_block_group(fs_info,
                                                       ffe_ctl.search_start);
                /*