btrfs: factor out found_extent() for extent allocation
authorNaohiro Aota <naohiro.aota@wdc.com>
Tue, 25 Feb 2020 03:56:22 +0000 (12:56 +0900)
committerDavid Sterba <dsterba@suse.com>
Mon, 23 Mar 2020 16:01:50 +0000 (17:01 +0100)
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>
fs/btrfs/extent-tree.c

index 6d4f53e..dfa88a7 100644 (file)
@@ -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;
        }