We want to move this into it's own file, so separate out the init/exit
code for setting up the extent_buffer cache.

Signed-off-by: Josef Bacik <[email protected]>
---
 fs/btrfs/extent_io.c | 36 +++++++++++++++++++-----------------
 fs/btrfs/extent_io.h |  2 ++
 fs/btrfs/super.c     |  9 ++++++++-
 3 files changed, 29 insertions(+), 18 deletions(-)

diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index 4adcdcdd80c3..e4bc40302225 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -137,32 +137,30 @@ static int __must_check flush_write_bio(struct 
extent_page_data *epd)
 
 int __init extent_io_init(void)
 {
-       extent_buffer_cache = kmem_cache_create("btrfs_extent_buffer",
-                       sizeof(struct extent_buffer), 0,
-                       SLAB_MEM_SPREAD, NULL);
-       if (!extent_buffer_cache)
-               return -ENOMEM;
-
        if (bioset_init(&btrfs_bioset, BIO_POOL_SIZE,
                        offsetof(struct btrfs_io_bio, bio),
                        BIOSET_NEED_BVECS))
-               goto free_buffer_cache;
+               return -ENOMEM;
 
-       if (bioset_integrity_create(&btrfs_bioset, BIO_POOL_SIZE))
-               goto free_bioset;
+       if (bioset_integrity_create(&btrfs_bioset, BIO_POOL_SIZE)) {
+               bioset_exit(&btrfs_bioset);
+               return -ENOMEM;
+       }
 
        return 0;
+}
 
-free_bioset:
-       bioset_exit(&btrfs_bioset);
-
-free_buffer_cache:
-       kmem_cache_destroy(extent_buffer_cache);
-       extent_buffer_cache = NULL;
-       return -ENOMEM;
+int __init extent_buffer_init(void)
+{
+       extent_buffer_cache = kmem_cache_create("btrfs_extent_buffer",
+                       sizeof(struct extent_buffer), 0,
+                       SLAB_MEM_SPREAD, NULL);
+       if (!extent_buffer_cache)
+               return -ENOMEM;
+       return 0;
 }
 
-void __cold extent_io_exit(void)
+void __cold extent_buffer_exit(void)
 {
        btrfs_extent_buffer_leak_debug_check();
 
@@ -172,6 +170,10 @@ void __cold extent_io_exit(void)
         */
        rcu_barrier();
        kmem_cache_destroy(extent_buffer_cache);
+}
+
+void __cold extent_io_exit(void)
+{
        bioset_exit(&btrfs_bioset);
 }
 
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
index e22045cef89b..e2246956e544 100644
--- a/fs/btrfs/extent_io.h
+++ b/fs/btrfs/extent_io.h
@@ -332,4 +332,6 @@ bool find_lock_delalloc_range(struct inode *inode,
 #endif
 struct extent_buffer *alloc_test_extent_buffer(struct btrfs_fs_info *fs_info,
                                               u64 start);
+int __init extent_buffer_init(void);
+void __cold extent_buffer_exit(void);
 #endif
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index 843015b9a11e..7207bb39f236 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -2360,10 +2360,14 @@ static int __init init_btrfs_fs(void)
        if (err)
                goto free_cachep;
 
-       err = extent_state_cache_init();
+       err = extent_buffer_init();
        if (err)
                goto free_extent_io;
 
+       err = extent_state_cache_init();
+       if (err)
+               goto free_extent_buffer;
+
        err = extent_map_init();
        if (err)
                goto free_extent_state_cache;
@@ -2428,6 +2432,8 @@ static int __init init_btrfs_fs(void)
        extent_map_exit();
 free_extent_state_cache:
        extent_state_cache_exit();
+free_extent_buffer:
+       extent_buffer_exit();
 free_extent_io:
        extent_io_exit();
 free_cachep:
@@ -2449,6 +2455,7 @@ static void __exit exit_btrfs_fs(void)
        ordered_data_exit();
        extent_map_exit();
        extent_state_cache_exit();
+       extent_buffer_exit();
        extent_io_exit();
        btrfs_interface_exit();
        btrfs_end_io_wq_exit();
-- 
2.21.0

Reply via email to