OSDN Git Service

btrfs: move free space cachep's out of ctree.h
authorJosef Bacik <josef@toxicpanda.com>
Wed, 14 Sep 2022 15:06:39 +0000 (11:06 -0400)
committerDavid Sterba <dsterba@suse.com>
Mon, 5 Dec 2022 17:00:37 +0000 (18:00 +0100)
This is local to the free-space-cache.c code, remove it from ctree.h and
inode.c, create new init/exit functions for the cachep, and move it
locally to free-space-cache.c.

Reviewed-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ctree.h
fs/btrfs/free-space-cache.c
fs/btrfs/free-space-cache.h
fs/btrfs/inode.c
fs/btrfs/super.c

index 282571b..ca5c67b 100644 (file)
@@ -41,8 +41,6 @@ struct btrfs_pending_snapshot;
 struct btrfs_delayed_ref_root;
 struct btrfs_space_info;
 struct btrfs_block_group;
-extern struct kmem_cache *btrfs_free_space_cachep;
-extern struct kmem_cache *btrfs_free_space_bitmap_cachep;
 struct btrfs_ordered_sum;
 struct btrfs_ref;
 struct btrfs_bio;
index f402365..bd68faf 100644 (file)
@@ -29,6 +29,9 @@
 #define MAX_CACHE_BYTES_PER_GIG        SZ_64K
 #define FORCE_EXTENT_THRESHOLD SZ_1M
 
+static struct kmem_cache *btrfs_free_space_cachep;
+static struct kmem_cache *btrfs_free_space_bitmap_cachep;
+
 struct btrfs_trim_range {
        u64 start;
        u64 bytes;
@@ -4132,6 +4135,31 @@ out:
        return ret;
 }
 
+int __init btrfs_free_space_init(void)
+{
+       btrfs_free_space_cachep = kmem_cache_create("btrfs_free_space",
+                       sizeof(struct btrfs_free_space), 0,
+                       SLAB_MEM_SPREAD, NULL);
+       if (!btrfs_free_space_cachep)
+               return -ENOMEM;
+
+       btrfs_free_space_bitmap_cachep = kmem_cache_create("btrfs_free_space_bitmap",
+                                                       PAGE_SIZE, PAGE_SIZE,
+                                                       SLAB_MEM_SPREAD, NULL);
+       if (!btrfs_free_space_bitmap_cachep) {
+               kmem_cache_destroy(btrfs_free_space_cachep);
+               return -ENOMEM;
+       }
+
+       return 0;
+}
+
+void __cold btrfs_free_space_exit(void)
+{
+       kmem_cache_destroy(btrfs_free_space_cachep);
+       kmem_cache_destroy(btrfs_free_space_bitmap_cachep);
+}
+
 #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
 /*
  * Use this if you need to make a bitmap or extent entry specifically, it
index eaf30f6..cab954a 100644 (file)
@@ -88,6 +88,8 @@ struct btrfs_io_ctl {
        int bitmaps;
 };
 
+int __init btrfs_free_space_init(void);
+void __cold btrfs_free_space_exit(void);
 struct inode *lookup_free_space_inode(struct btrfs_block_group *block_group,
                struct btrfs_path *path);
 int create_free_space_inode(struct btrfs_trans_handle *trans,
index 39c474e..50584b9 100644 (file)
@@ -107,8 +107,6 @@ static const struct address_space_operations btrfs_aops;
 static const struct file_operations btrfs_dir_file_operations;
 
 static struct kmem_cache *btrfs_inode_cachep;
-struct kmem_cache *btrfs_free_space_cachep;
-struct kmem_cache *btrfs_free_space_bitmap_cachep;
 
 static int btrfs_setsize(struct inode *inode, struct iattr *attr);
 static int btrfs_truncate(struct inode *inode, bool skip_writeback);
@@ -8924,8 +8922,6 @@ void __cold btrfs_destroy_cachep(void)
        rcu_barrier();
        bioset_exit(&btrfs_dio_bioset);
        kmem_cache_destroy(btrfs_inode_cachep);
-       kmem_cache_destroy(btrfs_free_space_cachep);
-       kmem_cache_destroy(btrfs_free_space_bitmap_cachep);
 }
 
 int __init btrfs_init_cachep(void)
@@ -8937,18 +8933,6 @@ int __init btrfs_init_cachep(void)
        if (!btrfs_inode_cachep)
                goto fail;
 
-       btrfs_free_space_cachep = kmem_cache_create("btrfs_free_space",
-                       sizeof(struct btrfs_free_space), 0,
-                       SLAB_MEM_SPREAD, NULL);
-       if (!btrfs_free_space_cachep)
-               goto fail;
-
-       btrfs_free_space_bitmap_cachep = kmem_cache_create("btrfs_free_space_bitmap",
-                                                       PAGE_SIZE, PAGE_SIZE,
-                                                       SLAB_MEM_SPREAD, NULL);
-       if (!btrfs_free_space_bitmap_cachep)
-               goto fail;
-
        if (bioset_init(&btrfs_dio_bioset, BIO_POOL_SIZE,
                        offsetof(struct btrfs_dio_private, bio),
                        BIOSET_NEED_BVECS))
index 9f8b775..0a93fbd 100644 (file)
@@ -2747,10 +2747,14 @@ static int __init init_btrfs_fs(void)
        if (err)
                goto free_transaction;
 
-       err = extent_state_init_cachep();
+       err = btrfs_free_space_init();
        if (err)
                goto free_ctree;
 
+       err = extent_state_init_cachep();
+       if (err)
+               goto free_free_space;
+
        err = extent_buffer_init_cachep();
        if (err)
                goto free_extent_cachep;
@@ -2819,6 +2823,8 @@ free_eb_cachep:
        extent_buffer_free_cachep();
 free_extent_cachep:
        extent_state_free_cachep();
+free_free_space:
+       btrfs_free_space_exit();
 free_ctree:
        btrfs_ctree_exit();
 free_transaction:
@@ -2834,6 +2840,7 @@ free_compress:
 
 static void __exit exit_btrfs_fs(void)
 {
+       btrfs_free_space_exit();
        btrfs_ctree_exit();
        btrfs_transaction_exit();
        btrfs_destroy_cachep();