diff options
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r-- | fs/btrfs/disk-io.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index fcf367581073..0cafacb07b43 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -2136,10 +2136,16 @@ int open_ctree(struct super_block *sb, | |||
2136 | goto fail_dirty_metadata_bytes; | 2136 | goto fail_dirty_metadata_bytes; |
2137 | } | 2137 | } |
2138 | 2138 | ||
2139 | ret = percpu_counter_init(&fs_info->bio_counter, 0); | ||
2140 | if (ret) { | ||
2141 | err = ret; | ||
2142 | goto fail_delalloc_bytes; | ||
2143 | } | ||
2144 | |||
2139 | fs_info->btree_inode = new_inode(sb); | 2145 | fs_info->btree_inode = new_inode(sb); |
2140 | if (!fs_info->btree_inode) { | 2146 | if (!fs_info->btree_inode) { |
2141 | err = -ENOMEM; | 2147 | err = -ENOMEM; |
2142 | goto fail_delalloc_bytes; | 2148 | goto fail_bio_counter; |
2143 | } | 2149 | } |
2144 | 2150 | ||
2145 | mapping_set_gfp_mask(fs_info->btree_inode->i_mapping, GFP_NOFS); | 2151 | mapping_set_gfp_mask(fs_info->btree_inode->i_mapping, GFP_NOFS); |
@@ -2214,6 +2220,7 @@ int open_ctree(struct super_block *sb, | |||
2214 | atomic_set(&fs_info->scrub_pause_req, 0); | 2220 | atomic_set(&fs_info->scrub_pause_req, 0); |
2215 | atomic_set(&fs_info->scrubs_paused, 0); | 2221 | atomic_set(&fs_info->scrubs_paused, 0); |
2216 | atomic_set(&fs_info->scrub_cancel_req, 0); | 2222 | atomic_set(&fs_info->scrub_cancel_req, 0); |
2223 | init_waitqueue_head(&fs_info->replace_wait); | ||
2217 | init_waitqueue_head(&fs_info->scrub_pause_wait); | 2224 | init_waitqueue_head(&fs_info->scrub_pause_wait); |
2218 | fs_info->scrub_workers_refcnt = 0; | 2225 | fs_info->scrub_workers_refcnt = 0; |
2219 | #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY | 2226 | #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY |
@@ -2966,6 +2973,8 @@ fail_iput: | |||
2966 | btrfs_mapping_tree_free(&fs_info->mapping_tree); | 2973 | btrfs_mapping_tree_free(&fs_info->mapping_tree); |
2967 | 2974 | ||
2968 | iput(fs_info->btree_inode); | 2975 | iput(fs_info->btree_inode); |
2976 | fail_bio_counter: | ||
2977 | percpu_counter_destroy(&fs_info->bio_counter); | ||
2969 | fail_delalloc_bytes: | 2978 | fail_delalloc_bytes: |
2970 | percpu_counter_destroy(&fs_info->delalloc_bytes); | 2979 | percpu_counter_destroy(&fs_info->delalloc_bytes); |
2971 | fail_dirty_metadata_bytes: | 2980 | fail_dirty_metadata_bytes: |
@@ -3613,6 +3622,7 @@ int close_ctree(struct btrfs_root *root) | |||
3613 | 3622 | ||
3614 | percpu_counter_destroy(&fs_info->dirty_metadata_bytes); | 3623 | percpu_counter_destroy(&fs_info->dirty_metadata_bytes); |
3615 | percpu_counter_destroy(&fs_info->delalloc_bytes); | 3624 | percpu_counter_destroy(&fs_info->delalloc_bytes); |
3625 | percpu_counter_destroy(&fs_info->bio_counter); | ||
3616 | bdi_destroy(&fs_info->bdi); | 3626 | bdi_destroy(&fs_info->bdi); |
3617 | cleanup_srcu_struct(&fs_info->subvol_srcu); | 3627 | cleanup_srcu_struct(&fs_info->subvol_srcu); |
3618 | 3628 | ||