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
