Lines Matching refs:fs_info
221 static int btrfs_relocate_sys_chunks(struct btrfs_fs_info *fs_info);
224 static int __btrfs_map_block(struct btrfs_fs_info *fs_info,
411 static struct btrfs_device *__alloc_device(struct btrfs_fs_info *fs_info) in __alloc_device() argument
438 extent_io_tree_init(fs_info, &dev->alloc_state, in __alloc_device()
990 btrfs_info_in_rcu(device->fs_info, in device_list_add()
1179 device->fs_info = NULL; in btrfs_close_one_device()
1220 fs_devices->fs_info = NULL; in close_fs_devices()
1434 lockdep_assert_held(&device->fs_info->chunk_mutex); in contains_pending_extent()
1535 struct btrfs_fs_info *fs_info = device->fs_info; in find_free_dev_extent_start() local
1536 struct btrfs_root *root = fs_info->dev_root; in find_free_dev_extent_start()
1684 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_free_dev_extent() local
1685 struct btrfs_root *root = fs_info->dev_root; in btrfs_free_dev_extent()
1721 btrfs_handle_fs_error(fs_info, ret, "Slot search failed"); in btrfs_free_dev_extent()
1729 btrfs_handle_fs_error(fs_info, ret, in btrfs_free_dev_extent()
1745 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_alloc_dev_extent() local
1746 struct btrfs_root *root = fs_info->dev_root; in btrfs_alloc_dev_extent()
1781 static u64 find_next_chunk(struct btrfs_fs_info *fs_info) in find_next_chunk() argument
1788 em_tree = &fs_info->mapping_tree; in find_next_chunk()
1800 static noinline int find_next_devid(struct btrfs_fs_info *fs_info, in find_next_devid() argument
1816 ret = btrfs_search_slot(NULL, fs_info->chunk_root, &key, path, 0, 0); in find_next_devid()
1822 btrfs_err(fs_info, "corrupted chunk tree devid -1 matched"); in find_next_devid()
1827 ret = btrfs_previous_item(fs_info->chunk_root, path, in find_next_devid()
1865 ret = btrfs_insert_empty_item(trans, trans->fs_info->chunk_root, path, in btrfs_add_dev_item()
1891 write_extent_buffer(leaf, trans->fs_info->fs_devices->metadata_uuid, in btrfs_add_dev_item()
1924 struct btrfs_root *root = device->fs_info->chunk_root; in btrfs_rm_dev_item()
1970 static int btrfs_check_raid_min_devices(struct btrfs_fs_info *fs_info, in btrfs_check_raid_min_devices() argument
1978 seq = read_seqbegin(&fs_info->profiles_lock); in btrfs_check_raid_min_devices()
1980 all_avail = fs_info->avail_data_alloc_bits | in btrfs_check_raid_min_devices()
1981 fs_info->avail_system_alloc_bits | in btrfs_check_raid_min_devices()
1982 fs_info->avail_metadata_alloc_bits; in btrfs_check_raid_min_devices()
1983 } while (read_seqretry(&fs_info->profiles_lock, seq)); in btrfs_check_raid_min_devices()
2024 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_assign_next_active_device() local
2027 next_device = btrfs_find_next_active_device(fs_info->fs_devices, in btrfs_assign_next_active_device()
2031 if (fs_info->sb->s_bdev && in btrfs_assign_next_active_device()
2032 (fs_info->sb->s_bdev == device->bdev)) in btrfs_assign_next_active_device()
2033 fs_info->sb->s_bdev = next_device->bdev; in btrfs_assign_next_active_device()
2035 if (fs_info->fs_devices->latest_bdev == device->bdev) in btrfs_assign_next_active_device()
2036 fs_info->fs_devices->latest_bdev = next_device->bdev; in btrfs_assign_next_active_device()
2043 static u64 btrfs_num_devices(struct btrfs_fs_info *fs_info) in btrfs_num_devices() argument
2045 u64 num_devices = fs_info->fs_devices->num_devices; in btrfs_num_devices()
2047 down_read(&fs_info->dev_replace.rwsem); in btrfs_num_devices()
2048 if (btrfs_dev_replace_is_ongoing(&fs_info->dev_replace)) { in btrfs_num_devices()
2052 up_read(&fs_info->dev_replace.rwsem); in btrfs_num_devices()
2057 void btrfs_scratch_superblocks(struct btrfs_fs_info *fs_info, in btrfs_scratch_superblocks() argument
2083 btrfs_warn(fs_info, in btrfs_scratch_superblocks()
2097 int btrfs_rm_device(struct btrfs_fs_info *fs_info, const char *device_path, in btrfs_rm_device() argument
2102 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_rm_device()
2111 num_devices = btrfs_num_devices(fs_info); in btrfs_rm_device()
2113 ret = btrfs_check_raid_min_devices(fs_info, num_devices - 1); in btrfs_rm_device()
2117 device = btrfs_find_device_by_devspec(fs_info, devid, device_path); in btrfs_rm_device()
2128 if (btrfs_pinned_by_swapfile(fs_info, device)) { in btrfs_rm_device()
2129 btrfs_warn_in_rcu(fs_info, in btrfs_rm_device()
2142 fs_info->fs_devices->rw_devices == 1) { in btrfs_rm_device()
2148 mutex_lock(&fs_info->chunk_mutex); in btrfs_rm_device()
2151 mutex_unlock(&fs_info->chunk_mutex); in btrfs_rm_device()
2208 num_devices = btrfs_super_num_devices(fs_info->super_copy) - 1; in btrfs_rm_device()
2209 btrfs_set_super_num_devices(fs_info->super_copy, num_devices); in btrfs_rm_device()
2218 btrfs_scratch_superblocks(fs_info, device->bdev, in btrfs_rm_device()
2237 mutex_lock(&fs_info->chunk_mutex); in btrfs_rm_device()
2241 mutex_unlock(&fs_info->chunk_mutex); in btrfs_rm_device()
2250 lockdep_assert_held(&srcdev->fs_info->fs_devices->device_list_mutex); in btrfs_rm_dev_replace_remove_srcdev()
2302 struct btrfs_fs_devices *fs_devices = tgtdev->fs_info->fs_devices; in btrfs_destroy_dev_replace_tgtdev()
2326 btrfs_scratch_superblocks(tgtdev->fs_info, tgtdev->bdev, in btrfs_destroy_dev_replace_tgtdev()
2335 struct btrfs_fs_info *fs_info, const char *device_path) in btrfs_find_device_by_path() argument
2345 fs_info->bdev_holder, 0, &bdev, &disk_super); in btrfs_find_device_by_path()
2351 if (btrfs_fs_incompat(fs_info, METADATA_UUID)) in btrfs_find_device_by_path()
2352 device = btrfs_find_device(fs_info->fs_devices, devid, dev_uuid, in btrfs_find_device_by_path()
2355 device = btrfs_find_device(fs_info->fs_devices, devid, dev_uuid, in btrfs_find_device_by_path()
2369 struct btrfs_fs_info *fs_info, u64 devid, in btrfs_find_device_by_devspec() argument
2375 device = btrfs_find_device(fs_info->fs_devices, devid, NULL, in btrfs_find_device_by_devspec()
2387 list_for_each_entry(device, &fs_info->fs_devices->devices, in btrfs_find_device_by_devspec()
2396 return btrfs_find_device_by_path(fs_info, device_path); in btrfs_find_device_by_devspec()
2402 static int btrfs_prepare_sprout(struct btrfs_fs_info *fs_info) in btrfs_prepare_sprout() argument
2404 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_prepare_sprout()
2407 struct btrfs_super_block *disk_super = fs_info->super_copy; in btrfs_prepare_sprout()
2473 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_finish_sprout() local
2474 struct btrfs_root *root = fs_info->chunk_root; in btrfs_finish_sprout()
2524 device = btrfs_find_device(fs_info->fs_devices, devid, dev_uuid, in btrfs_finish_sprout()
2543 int btrfs_init_new_device(struct btrfs_fs_info *fs_info, const char *device_path) in btrfs_init_new_device() argument
2545 struct btrfs_root *root = fs_info->dev_root; in btrfs_init_new_device()
2550 struct super_block *sb = fs_info->sb; in btrfs_init_new_device()
2552 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_new_device()
2563 fs_info->bdev_holder); in btrfs_init_new_device()
2586 device = btrfs_alloc_device(fs_info, NULL, NULL); in btrfs_init_new_device()
2609 device->io_width = fs_info->sectorsize; in btrfs_init_new_device()
2610 device->io_align = fs_info->sectorsize; in btrfs_init_new_device()
2611 device->sector_size = fs_info->sectorsize; in btrfs_init_new_device()
2613 fs_info->sectorsize); in btrfs_init_new_device()
2616 device->fs_info = fs_info; in btrfs_init_new_device()
2626 ret = btrfs_prepare_sprout(fs_info); in btrfs_init_new_device()
2636 mutex_lock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2645 atomic64_add(device->total_bytes, &fs_info->free_chunk_space); in btrfs_init_new_device()
2650 orig_super_total_bytes = btrfs_super_total_bytes(fs_info->super_copy); in btrfs_init_new_device()
2651 btrfs_set_super_total_bytes(fs_info->super_copy, in btrfs_init_new_device()
2653 fs_info->sectorsize)); in btrfs_init_new_device()
2655 orig_super_num_devices = btrfs_super_num_devices(fs_info->super_copy); in btrfs_init_new_device()
2656 btrfs_set_super_num_devices(fs_info->super_copy, in btrfs_init_new_device()
2663 btrfs_clear_space_info_full(fs_info); in btrfs_init_new_device()
2665 mutex_unlock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2673 mutex_lock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2675 mutex_unlock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2712 ret = btrfs_relocate_sys_chunks(fs_info); in btrfs_init_new_device()
2714 btrfs_handle_fs_error(fs_info, ret, in btrfs_init_new_device()
2743 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2744 mutex_lock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2747 fs_info->fs_devices->num_devices--; in btrfs_init_new_device()
2748 fs_info->fs_devices->open_devices--; in btrfs_init_new_device()
2749 fs_info->fs_devices->rw_devices--; in btrfs_init_new_device()
2750 fs_info->fs_devices->total_devices--; in btrfs_init_new_device()
2751 fs_info->fs_devices->total_rw_bytes -= device->total_bytes; in btrfs_init_new_device()
2752 atomic64_sub(device->total_bytes, &fs_info->free_chunk_space); in btrfs_init_new_device()
2753 btrfs_set_super_total_bytes(fs_info->super_copy, in btrfs_init_new_device()
2755 btrfs_set_super_num_devices(fs_info->super_copy, in btrfs_init_new_device()
2757 mutex_unlock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2758 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2780 struct btrfs_root *root = device->fs_info->chunk_root; in btrfs_update_device()
2824 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_grow_device() local
2825 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_grow_device()
2832 new_size = round_down(new_size, fs_info->sectorsize); in btrfs_grow_device()
2834 mutex_lock(&fs_info->chunk_mutex); in btrfs_grow_device()
2836 diff = round_down(new_size - device->total_bytes, fs_info->sectorsize); in btrfs_grow_device()
2840 mutex_unlock(&fs_info->chunk_mutex); in btrfs_grow_device()
2845 round_down(old_total + diff, fs_info->sectorsize)); in btrfs_grow_device()
2850 btrfs_clear_space_info_full(device->fs_info); in btrfs_grow_device()
2854 mutex_unlock(&fs_info->chunk_mutex); in btrfs_grow_device()
2861 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_free_chunk() local
2862 struct btrfs_root *root = fs_info->chunk_root; in btrfs_free_chunk()
2879 btrfs_handle_fs_error(fs_info, -ENOENT, in btrfs_free_chunk()
2887 btrfs_handle_fs_error(fs_info, ret, in btrfs_free_chunk()
2894 static int btrfs_del_sys_chunk(struct btrfs_fs_info *fs_info, u64 chunk_offset) in btrfs_del_sys_chunk() argument
2896 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_del_sys_chunk()
2907 mutex_lock(&fs_info->chunk_mutex); in btrfs_del_sys_chunk()
2937 mutex_unlock(&fs_info->chunk_mutex); in btrfs_del_sys_chunk()
2948 struct extent_map *btrfs_get_chunk_map(struct btrfs_fs_info *fs_info, in btrfs_get_chunk_map() argument
2954 em_tree = &fs_info->mapping_tree; in btrfs_get_chunk_map()
2960 btrfs_crit(fs_info, "unable to find logical %llu length %llu", in btrfs_get_chunk_map()
2966 btrfs_crit(fs_info, in btrfs_get_chunk_map()
2979 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_remove_chunk() local
2984 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_remove_chunk()
2986 em = btrfs_get_chunk_map(fs_info, chunk_offset, 1); in btrfs_remove_chunk()
2997 mutex_lock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
2999 mutex_unlock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
3019 mutex_lock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
3022 atomic64_add(dev_extent_len, &fs_info->free_chunk_space); in btrfs_remove_chunk()
3023 btrfs_clear_space_info_full(fs_info); in btrfs_remove_chunk()
3024 mutex_unlock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
3042 trace_btrfs_chunk_free(fs_info, map, chunk_offset, em->len); in btrfs_remove_chunk()
3045 ret = btrfs_del_sys_chunk(fs_info, chunk_offset); in btrfs_remove_chunk()
3064 static int btrfs_relocate_chunk(struct btrfs_fs_info *fs_info, u64 chunk_offset) in btrfs_relocate_chunk() argument
3066 struct btrfs_root *root = fs_info->chunk_root; in btrfs_relocate_chunk()
3083 lockdep_assert_held(&fs_info->delete_unused_bgs_mutex); in btrfs_relocate_chunk()
3086 btrfs_scrub_pause(fs_info); in btrfs_relocate_chunk()
3087 ret = btrfs_relocate_block_group(fs_info, chunk_offset); in btrfs_relocate_chunk()
3088 btrfs_scrub_continue(fs_info); in btrfs_relocate_chunk()
3092 block_group = btrfs_lookup_block_group(fs_info, chunk_offset); in btrfs_relocate_chunk()
3095 btrfs_discard_cancel_work(&fs_info->discard_ctl, block_group); in btrfs_relocate_chunk()
3098 trans = btrfs_start_trans_remove_block_group(root->fs_info, in btrfs_relocate_chunk()
3102 btrfs_handle_fs_error(root->fs_info, ret, NULL); in btrfs_relocate_chunk()
3115 static int btrfs_relocate_sys_chunks(struct btrfs_fs_info *fs_info) in btrfs_relocate_sys_chunks() argument
3117 struct btrfs_root *chunk_root = fs_info->chunk_root; in btrfs_relocate_sys_chunks()
3138 mutex_lock(&fs_info->delete_unused_bgs_mutex); in btrfs_relocate_sys_chunks()
3141 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_relocate_sys_chunks()
3149 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_relocate_sys_chunks()
3164 ret = btrfs_relocate_chunk(fs_info, found_key.offset); in btrfs_relocate_sys_chunks()
3170 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_relocate_sys_chunks()
3194 static int btrfs_may_alloc_data_chunk(struct btrfs_fs_info *fs_info, in btrfs_may_alloc_data_chunk() argument
3201 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in btrfs_may_alloc_data_chunk()
3209 spin_lock(&fs_info->data_sinfo->lock); in btrfs_may_alloc_data_chunk()
3210 bytes_used = fs_info->data_sinfo->bytes_used; in btrfs_may_alloc_data_chunk()
3211 spin_unlock(&fs_info->data_sinfo->lock); in btrfs_may_alloc_data_chunk()
3217 trans = btrfs_join_transaction(fs_info->tree_root); in btrfs_may_alloc_data_chunk()
3231 static int insert_balance_item(struct btrfs_fs_info *fs_info, in insert_balance_item() argument
3234 struct btrfs_root *root = fs_info->tree_root; in insert_balance_item()
3285 static int del_balance_item(struct btrfs_fs_info *fs_info) in del_balance_item() argument
3287 struct btrfs_root *root = fs_info->tree_root; in del_balance_item()
3370 static void reset_balance_state(struct btrfs_fs_info *fs_info) in reset_balance_state() argument
3372 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in reset_balance_state()
3375 BUG_ON(!fs_info->balance_ctl); in reset_balance_state()
3377 spin_lock(&fs_info->balance_lock); in reset_balance_state()
3378 fs_info->balance_ctl = NULL; in reset_balance_state()
3379 spin_unlock(&fs_info->balance_lock); in reset_balance_state()
3382 ret = del_balance_item(fs_info); in reset_balance_state()
3384 btrfs_handle_fs_error(fs_info, ret, NULL); in reset_balance_state()
3403 static int chunk_usage_range_filter(struct btrfs_fs_info *fs_info, u64 chunk_offset, in chunk_usage_range_filter() argument
3412 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in chunk_usage_range_filter()
3436 static int chunk_usage_filter(struct btrfs_fs_info *fs_info, in chunk_usage_filter() argument
3443 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in chunk_usage_filter()
3570 struct btrfs_fs_info *fs_info = leaf->fs_info; in should_balance_chunk() local
3571 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in should_balance_chunk()
3596 chunk_usage_filter(fs_info, chunk_offset, bargs)) { in should_balance_chunk()
3599 chunk_usage_range_filter(fs_info, chunk_offset, bargs)) { in should_balance_chunk()
3656 static int __btrfs_balance(struct btrfs_fs_info *fs_info) in __btrfs_balance() argument
3658 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in __btrfs_balance()
3659 struct btrfs_root *chunk_root = fs_info->chunk_root; in __btrfs_balance()
3686 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3688 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3704 if ((!counting && atomic_read(&fs_info->balance_pause_req)) || in __btrfs_balance()
3705 atomic_read(&fs_info->balance_cancel_req)) { in __btrfs_balance()
3710 mutex_lock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3713 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3727 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3737 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3745 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3747 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3754 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3759 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3760 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3762 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3784 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3795 ret = btrfs_may_alloc_data_chunk(fs_info, in __btrfs_balance()
3798 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3805 ret = btrfs_relocate_chunk(fs_info, found_key.offset); in __btrfs_balance()
3806 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3810 btrfs_info(fs_info, in __btrfs_balance()
3817 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3819 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3835 btrfs_info(fs_info, "%d enospc errors during balance", in __btrfs_balance()
3867 static inline int balance_need_close(struct btrfs_fs_info *fs_info) in balance_need_close() argument
3870 return atomic_read(&fs_info->balance_cancel_req) || in balance_need_close()
3871 (atomic_read(&fs_info->balance_pause_req) == 0 && in balance_need_close()
3872 atomic_read(&fs_info->balance_cancel_req) == 0); in balance_need_close()
3879 static inline int validate_convert_profile(struct btrfs_fs_info *fs_info, in validate_convert_profile() argument
3891 btrfs_err(fs_info, "balance: invalid convert %s profile %s", in validate_convert_profile()
3994 static void describe_balance_start_or_resume(struct btrfs_fs_info *fs_info) in describe_balance_start_or_resume() argument
4002 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in describe_balance_start_or_resume()
4043 btrfs_info(fs_info, "balance: %s %s", in describe_balance_start_or_resume()
4053 int btrfs_balance(struct btrfs_fs_info *fs_info, in btrfs_balance() argument
4066 if (btrfs_fs_closing(fs_info) || in btrfs_balance()
4067 atomic_read(&fs_info->balance_pause_req) || in btrfs_balance()
4068 btrfs_should_cancel_balance(fs_info)) { in btrfs_balance()
4073 allowed = btrfs_super_incompat_flags(fs_info->super_copy); in btrfs_balance()
4086 btrfs_err(fs_info, in btrfs_balance()
4097 num_devices = fs_info->fs_devices->rw_devices; in btrfs_balance()
4109 if (!validate_convert_profile(fs_info, &bctl->data, allowed, "data") || in btrfs_balance()
4110 !validate_convert_profile(fs_info, &bctl->meta, allowed, "metadata") || in btrfs_balance()
4111 !validate_convert_profile(fs_info, &bctl->sys, allowed, "system")) { in btrfs_balance()
4127 seq = read_seqbegin(&fs_info->profiles_lock); in btrfs_balance()
4130 (fs_info->avail_system_alloc_bits & allowed) && in btrfs_balance()
4133 (fs_info->avail_metadata_alloc_bits & allowed) && in btrfs_balance()
4141 bctl->meta.target : fs_info->avail_metadata_alloc_bits; in btrfs_balance()
4143 bctl->data.target : fs_info->avail_data_alloc_bits; in btrfs_balance()
4144 } while (read_seqretry(&fs_info->profiles_lock, seq)); in btrfs_balance()
4148 btrfs_info(fs_info, in btrfs_balance()
4151 btrfs_err(fs_info, in btrfs_balance()
4160 btrfs_warn(fs_info, in btrfs_balance()
4166 if (fs_info->send_in_progress) { in btrfs_balance()
4167 btrfs_warn_rl(fs_info, in btrfs_balance()
4169 fs_info->send_in_progress); in btrfs_balance()
4174 ret = insert_balance_item(fs_info, bctl); in btrfs_balance()
4180 BUG_ON(fs_info->balance_ctl); in btrfs_balance()
4181 spin_lock(&fs_info->balance_lock); in btrfs_balance()
4182 fs_info->balance_ctl = bctl; in btrfs_balance()
4183 spin_unlock(&fs_info->balance_lock); in btrfs_balance()
4186 spin_lock(&fs_info->balance_lock); in btrfs_balance()
4188 spin_unlock(&fs_info->balance_lock); in btrfs_balance()
4191 ASSERT(!test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_balance()
4192 set_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags); in btrfs_balance()
4193 describe_balance_start_or_resume(fs_info); in btrfs_balance()
4194 mutex_unlock(&fs_info->balance_mutex); in btrfs_balance()
4196 ret = __btrfs_balance(fs_info); in btrfs_balance()
4198 mutex_lock(&fs_info->balance_mutex); in btrfs_balance()
4199 if (ret == -ECANCELED && atomic_read(&fs_info->balance_pause_req)) in btrfs_balance()
4200 btrfs_info(fs_info, "balance: paused"); in btrfs_balance()
4217 btrfs_info(fs_info, "balance: canceled"); in btrfs_balance()
4219 btrfs_info(fs_info, "balance: ended with status: %d", ret); in btrfs_balance()
4221 clear_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags); in btrfs_balance()
4225 btrfs_update_ioctl_balance_args(fs_info, bargs); in btrfs_balance()
4229 balance_need_close(fs_info)) { in btrfs_balance()
4230 reset_balance_state(fs_info); in btrfs_balance()
4231 btrfs_exclop_finish(fs_info); in btrfs_balance()
4234 wake_up(&fs_info->balance_wait_q); in btrfs_balance()
4239 reset_balance_state(fs_info); in btrfs_balance()
4242 btrfs_exclop_finish(fs_info); in btrfs_balance()
4249 struct btrfs_fs_info *fs_info = data; in balance_kthread() local
4252 sb_start_write(fs_info->sb); in balance_kthread()
4253 mutex_lock(&fs_info->balance_mutex); in balance_kthread()
4254 if (fs_info->balance_ctl) in balance_kthread()
4255 ret = btrfs_balance(fs_info, fs_info->balance_ctl, NULL); in balance_kthread()
4256 mutex_unlock(&fs_info->balance_mutex); in balance_kthread()
4257 sb_end_write(fs_info->sb); in balance_kthread()
4262 int btrfs_resume_balance_async(struct btrfs_fs_info *fs_info) in btrfs_resume_balance_async() argument
4266 mutex_lock(&fs_info->balance_mutex); in btrfs_resume_balance_async()
4267 if (!fs_info->balance_ctl) { in btrfs_resume_balance_async()
4268 mutex_unlock(&fs_info->balance_mutex); in btrfs_resume_balance_async()
4271 mutex_unlock(&fs_info->balance_mutex); in btrfs_resume_balance_async()
4273 if (btrfs_test_opt(fs_info, SKIP_BALANCE)) { in btrfs_resume_balance_async()
4274 btrfs_info(fs_info, "balance: resume skipped"); in btrfs_resume_balance_async()
4283 spin_lock(&fs_info->balance_lock); in btrfs_resume_balance_async()
4284 fs_info->balance_ctl->flags |= BTRFS_BALANCE_RESUME; in btrfs_resume_balance_async()
4285 spin_unlock(&fs_info->balance_lock); in btrfs_resume_balance_async()
4287 tsk = kthread_run(balance_kthread, fs_info, "btrfs-balance"); in btrfs_resume_balance_async()
4291 int btrfs_recover_balance(struct btrfs_fs_info *fs_info) in btrfs_recover_balance() argument
4309 ret = btrfs_search_slot(NULL, fs_info->tree_root, &key, path, 0, 0); in btrfs_recover_balance()
4346 if (!btrfs_exclop_start(fs_info, BTRFS_EXCLOP_BALANCE)) in btrfs_recover_balance()
4347 btrfs_warn(fs_info, in btrfs_recover_balance()
4352 mutex_lock(&fs_info->balance_mutex); in btrfs_recover_balance()
4353 BUG_ON(fs_info->balance_ctl); in btrfs_recover_balance()
4354 spin_lock(&fs_info->balance_lock); in btrfs_recover_balance()
4355 fs_info->balance_ctl = bctl; in btrfs_recover_balance()
4356 spin_unlock(&fs_info->balance_lock); in btrfs_recover_balance()
4357 mutex_unlock(&fs_info->balance_mutex); in btrfs_recover_balance()
4363 int btrfs_pause_balance(struct btrfs_fs_info *fs_info) in btrfs_pause_balance() argument
4367 mutex_lock(&fs_info->balance_mutex); in btrfs_pause_balance()
4368 if (!fs_info->balance_ctl) { in btrfs_pause_balance()
4369 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
4373 if (test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)) { in btrfs_pause_balance()
4374 atomic_inc(&fs_info->balance_pause_req); in btrfs_pause_balance()
4375 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
4377 wait_event(fs_info->balance_wait_q, in btrfs_pause_balance()
4378 !test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_pause_balance()
4380 mutex_lock(&fs_info->balance_mutex); in btrfs_pause_balance()
4382 BUG_ON(test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_pause_balance()
4383 atomic_dec(&fs_info->balance_pause_req); in btrfs_pause_balance()
4388 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
4392 int btrfs_cancel_balance(struct btrfs_fs_info *fs_info) in btrfs_cancel_balance() argument
4394 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4395 if (!fs_info->balance_ctl) { in btrfs_cancel_balance()
4396 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4405 if (sb_rdonly(fs_info->sb)) { in btrfs_cancel_balance()
4406 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4410 atomic_inc(&fs_info->balance_cancel_req); in btrfs_cancel_balance()
4415 if (test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)) { in btrfs_cancel_balance()
4416 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4417 wait_event(fs_info->balance_wait_q, in btrfs_cancel_balance()
4418 !test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_cancel_balance()
4419 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4421 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4426 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4428 if (fs_info->balance_ctl) { in btrfs_cancel_balance()
4429 reset_balance_state(fs_info); in btrfs_cancel_balance()
4430 btrfs_exclop_finish(fs_info); in btrfs_cancel_balance()
4431 btrfs_info(fs_info, "balance: canceled"); in btrfs_cancel_balance()
4435 BUG_ON(fs_info->balance_ctl || in btrfs_cancel_balance()
4436 test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_cancel_balance()
4437 atomic_dec(&fs_info->balance_cancel_req); in btrfs_cancel_balance()
4438 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4444 struct btrfs_fs_info *fs_info = data; in btrfs_uuid_scan_kthread() local
4445 struct btrfs_root *root = fs_info->tree_root; in btrfs_uuid_scan_kthread()
4467 if (btrfs_fs_closing(fs_info)) { in btrfs_uuid_scan_kthread()
4507 trans = btrfs_start_transaction(fs_info->uuid_root, 2); in btrfs_uuid_scan_kthread()
4523 btrfs_warn(fs_info, "uuid_tree_add failed %d", in btrfs_uuid_scan_kthread()
4535 btrfs_warn(fs_info, "uuid_tree_add failed %d", in btrfs_uuid_scan_kthread()
4570 btrfs_warn(fs_info, "btrfs_uuid_scan_kthread failed %d", ret); in btrfs_uuid_scan_kthread()
4572 set_bit(BTRFS_FS_UPDATE_UUID_TREE_GEN, &fs_info->flags); in btrfs_uuid_scan_kthread()
4573 up(&fs_info->uuid_tree_rescan_sem); in btrfs_uuid_scan_kthread()
4577 int btrfs_create_uuid_tree(struct btrfs_fs_info *fs_info) in btrfs_create_uuid_tree() argument
4580 struct btrfs_root *tree_root = fs_info->tree_root; in btrfs_create_uuid_tree()
4601 fs_info->uuid_root = uuid_root; in btrfs_create_uuid_tree()
4607 down(&fs_info->uuid_tree_rescan_sem); in btrfs_create_uuid_tree()
4608 task = kthread_run(btrfs_uuid_scan_kthread, fs_info, "btrfs-uuid"); in btrfs_create_uuid_tree()
4611 btrfs_warn(fs_info, "failed to start uuid_scan task"); in btrfs_create_uuid_tree()
4612 up(&fs_info->uuid_tree_rescan_sem); in btrfs_create_uuid_tree()
4626 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_shrink_device() local
4627 struct btrfs_root *root = fs_info->dev_root; in btrfs_shrink_device()
4639 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_shrink_device()
4645 new_size = round_down(new_size, fs_info->sectorsize); in btrfs_shrink_device()
4647 diff = round_down(old_size - new_size, fs_info->sectorsize); in btrfs_shrink_device()
4664 mutex_lock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4669 atomic64_sub(diff, &fs_info->free_chunk_space); in btrfs_shrink_device()
4678 mutex_unlock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4683 mutex_unlock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4693 mutex_lock(&fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4696 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4702 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4716 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4725 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4739 ret = btrfs_may_alloc_data_chunk(fs_info, chunk_offset); in btrfs_shrink_device()
4741 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4745 ret = btrfs_relocate_chunk(fs_info, chunk_offset); in btrfs_shrink_device()
4746 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4751 btrfs_warn(fs_info, in btrfs_shrink_device()
4775 mutex_lock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4787 round_down(old_total - diff, fs_info->sectorsize)); in btrfs_shrink_device()
4788 mutex_unlock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4801 mutex_lock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4805 atomic64_add(diff, &fs_info->free_chunk_space); in btrfs_shrink_device()
4806 mutex_unlock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4811 static int btrfs_add_system_chunk(struct btrfs_fs_info *fs_info, in btrfs_add_system_chunk() argument
4815 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_add_system_chunk()
4820 mutex_lock(&fs_info->chunk_mutex); in btrfs_add_system_chunk()
4824 mutex_unlock(&fs_info->chunk_mutex); in btrfs_add_system_chunk()
4835 mutex_unlock(&fs_info->chunk_mutex); in btrfs_add_system_chunk()
4946 ctl->devs_max = BTRFS_MAX_DEVS(fs_devices->fs_info); in init_alloc_chunk_ctl()
4966 struct btrfs_fs_info *info = fs_devices->fs_info; in gather_device_info()
5087 struct btrfs_fs_info *info = fs_devices->fs_info; in decide_stripe_size()
5119 struct btrfs_fs_info *info = trans->fs_info; in create_chunk()
5211 struct btrfs_fs_info *info = trans->fs_info; in btrfs_alloc_chunk()
5270 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_finish_chunk_alloc() local
5271 struct btrfs_root *extent_root = fs_info->extent_root; in btrfs_finish_chunk_alloc()
5272 struct btrfs_root *chunk_root = fs_info->chunk_root; in btrfs_finish_chunk_alloc()
5285 em = btrfs_get_chunk_map(fs_info, chunk_offset, chunk_size); in btrfs_finish_chunk_alloc()
5306 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_finish_chunk_alloc()
5320 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_finish_chunk_alloc()
5334 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_finish_chunk_alloc()
5343 btrfs_set_stack_chunk_sector_size(chunk, fs_info->sectorsize); in btrfs_finish_chunk_alloc()
5356 ret = btrfs_add_system_chunk(fs_info, &key, chunk, item_size); in btrfs_finish_chunk_alloc()
5367 struct btrfs_fs_info *fs_info = trans->fs_info; in init_first_rw_device() local
5371 alloc_profile = btrfs_metadata_alloc_profile(fs_info); in init_first_rw_device()
5376 alloc_profile = btrfs_system_alloc_profile(fs_info); in init_first_rw_device()
5388 int btrfs_chunk_readonly(struct btrfs_fs_info *fs_info, u64 chunk_offset) in btrfs_chunk_readonly() argument
5396 em = btrfs_get_chunk_map(fs_info, chunk_offset, 1); in btrfs_chunk_readonly()
5445 int btrfs_num_copies(struct btrfs_fs_info *fs_info, u64 logical, u64 len) in btrfs_num_copies() argument
5451 em = btrfs_get_chunk_map(fs_info, logical, len); in btrfs_num_copies()
5481 down_read(&fs_info->dev_replace.rwsem); in btrfs_num_copies()
5482 if (btrfs_dev_replace_is_ongoing(&fs_info->dev_replace) && in btrfs_num_copies()
5483 fs_info->dev_replace.tgtdev) in btrfs_num_copies()
5485 up_read(&fs_info->dev_replace.rwsem); in btrfs_num_copies()
5490 unsigned long btrfs_full_stripe_len(struct btrfs_fs_info *fs_info, in btrfs_full_stripe_len() argument
5495 unsigned long len = fs_info->sectorsize; in btrfs_full_stripe_len()
5497 em = btrfs_get_chunk_map(fs_info, logical, len); in btrfs_full_stripe_len()
5508 int btrfs_is_parity_mirror(struct btrfs_fs_info *fs_info, u64 logical, u64 len) in btrfs_is_parity_mirror() argument
5514 em = btrfs_get_chunk_map(fs_info, logical, len); in btrfs_is_parity_mirror()
5525 static int find_live_mirror(struct btrfs_fs_info *fs_info, in find_live_mirror() argument
5546 fs_info->dev_replace.cont_reading_from_srcdev_mode == in find_live_mirror()
5548 srcdev = fs_info->dev_replace.srcdev; in find_live_mirror()
5637 static int __btrfs_map_block_for_discard(struct btrfs_fs_info *fs_info, in __btrfs_map_block_for_discard() argument
5665 em = btrfs_get_chunk_map(fs_info, logical, length); in __btrfs_map_block_for_discard()
5799 static int get_extra_mirror_from_replace(struct btrfs_fs_info *fs_info, in get_extra_mirror_from_replace() argument
5812 ret = __btrfs_map_block(fs_info, BTRFS_MAP_GET_READ_MIRRORS, in get_extra_mirror_from_replace()
5976 int btrfs_get_io_geometry(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, in btrfs_get_io_geometry() argument
5991 em = btrfs_get_chunk_map(fs_info, logical, len); in btrfs_get_io_geometry()
6005 btrfs_crit(fs_info, in btrfs_get_io_geometry()
6062 static int __btrfs_map_block(struct btrfs_fs_info *fs_info, in __btrfs_map_block() argument
6081 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in __btrfs_map_block()
6092 ret = btrfs_get_io_geometry(fs_info, op, logical, *length, &geom); in __btrfs_map_block()
6096 em = btrfs_get_chunk_map(fs_info, logical, *length); in __btrfs_map_block()
6118 ret = get_extra_mirror_from_replace(fs_info, logical, *length, in __btrfs_map_block()
6143 stripe_index = find_live_mirror(fs_info, map, 0, in __btrfs_map_block()
6169 stripe_index = find_live_mirror(fs_info, map, in __btrfs_map_block()
6216 btrfs_crit(fs_info, in __btrfs_map_block()
6304 int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, in btrfs_map_block() argument
6309 return __btrfs_map_block_for_discard(fs_info, logical, in btrfs_map_block()
6312 return __btrfs_map_block(fs_info, op, logical, length, bbio_ret, in btrfs_map_block()
6317 int btrfs_map_sblock(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, in btrfs_map_sblock() argument
6321 return __btrfs_map_block(fs_info, op, logical, length, bbio_ret, 0, 1); in btrfs_map_sblock()
6360 btrfs_bio_counter_dec(bbio->fs_info); in btrfs_end_bio()
6391 struct btrfs_fs_info *fs_info = bbio->fs_info; in submit_stripe_bio() local
6397 btrfs_debug_in_rcu(fs_info, in submit_stripe_bio()
6404 btrfs_bio_counter_inc_noblocked(fs_info); in submit_stripe_bio()
6426 blk_status_t btrfs_map_bio(struct btrfs_fs_info *fs_info, struct bio *bio, in btrfs_map_bio() argument
6442 btrfs_bio_counter_inc_blocked(fs_info); in btrfs_map_bio()
6443 ret = __btrfs_map_block(fs_info, btrfs_op(bio), logical, in btrfs_map_bio()
6446 btrfs_bio_counter_dec(fs_info); in btrfs_map_bio()
6454 bbio->fs_info = fs_info; in btrfs_map_bio()
6462 ret = raid56_parity_write(fs_info, bio, bbio, in btrfs_map_bio()
6465 ret = raid56_parity_recover(fs_info, bio, bbio, in btrfs_map_bio()
6469 btrfs_bio_counter_dec(fs_info); in btrfs_map_bio()
6474 btrfs_crit(fs_info, in btrfs_map_bio()
6497 btrfs_bio_counter_dec(fs_info); in btrfs_map_bio()
6583 struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info, in btrfs_alloc_device() argument
6590 if (WARN_ON(!devid && !fs_info)) in btrfs_alloc_device()
6593 dev = __alloc_device(fs_info); in btrfs_alloc_device()
6602 ret = find_next_devid(fs_info, &tmp); in btrfs_alloc_device()
6618 static void btrfs_report_missing_device(struct btrfs_fs_info *fs_info, in btrfs_report_missing_device() argument
6622 btrfs_err_rl(fs_info, "devid %llu uuid %pU is missing", in btrfs_report_missing_device()
6625 btrfs_warn_rl(fs_info, "devid %llu uuid %pU is missing", in btrfs_report_missing_device()
6647 struct btrfs_fs_info *fs_info = leaf->fs_info; in read_one_chunk() local
6648 struct extent_map_tree *map_tree = &fs_info->mapping_tree; in read_one_chunk()
6718 map->stripes[i].dev = btrfs_find_device(fs_info->fs_devices, in read_one_chunk()
6721 !btrfs_test_opt(fs_info, DEGRADED)) { in read_one_chunk()
6723 btrfs_report_missing_device(fs_info, devid, uuid, true); in read_one_chunk()
6728 add_missing_dev(fs_info->fs_devices, devid, in read_one_chunk()
6732 btrfs_err(fs_info, in read_one_chunk()
6737 btrfs_report_missing_device(fs_info, devid, uuid, false); in read_one_chunk()
6748 btrfs_err(fs_info, in read_one_chunk()
6780 static struct btrfs_fs_devices *open_seed_devices(struct btrfs_fs_info *fs_info, in open_seed_devices() argument
6790 list_for_each_entry(fs_devices, &fs_info->fs_devices->seed_list, seed_list) in open_seed_devices()
6797 if (!btrfs_test_opt(fs_info, DEGRADED)) in open_seed_devices()
6817 ret = open_fs_devices(fs_devices, FMODE_READ, fs_info->bdev_holder); in open_seed_devices()
6829 list_add(&fs_devices->seed_list, &fs_info->fs_devices->seed_list); in open_seed_devices()
6837 struct btrfs_fs_info *fs_info = leaf->fs_info; in read_one_dev() local
6838 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in read_one_dev()
6852 fs_devices = open_seed_devices(fs_info, fs_uuid); in read_one_dev()
6857 device = btrfs_find_device(fs_info->fs_devices, devid, dev_uuid, in read_one_dev()
6860 if (!btrfs_test_opt(fs_info, DEGRADED)) { in read_one_dev()
6861 btrfs_report_missing_device(fs_info, devid, in read_one_dev()
6868 btrfs_err(fs_info, in read_one_dev()
6873 btrfs_report_missing_device(fs_info, devid, dev_uuid, false); in read_one_dev()
6876 if (!btrfs_test_opt(fs_info, DEGRADED)) { in read_one_dev()
6877 btrfs_report_missing_device(fs_info, in read_one_dev()
6881 btrfs_report_missing_device(fs_info, devid, in read_one_dev()
6913 if (device->fs_devices != fs_info->fs_devices) { in read_one_dev()
6926 &fs_info->free_chunk_space); in read_one_dev()
6932 int btrfs_read_sys_array(struct btrfs_fs_info *fs_info) in btrfs_read_sys_array() argument
6934 struct btrfs_root *root = fs_info->tree_root; in btrfs_read_sys_array()
6935 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_read_sys_array()
6949 ASSERT(BTRFS_SUPER_INFO_SIZE <= fs_info->nodesize); in btrfs_read_sys_array()
6955 sb = btrfs_find_create_tree_block(fs_info, BTRFS_SUPER_INFO_OFFSET); in btrfs_read_sys_array()
6995 btrfs_err(fs_info, in btrfs_read_sys_array()
7013 btrfs_err(fs_info, in btrfs_read_sys_array()
7022 btrfs_err(fs_info, in btrfs_read_sys_array()
7046 btrfs_err(fs_info, "sys_array too short to read %u bytes at offset %u", in btrfs_read_sys_array()
7061 bool btrfs_check_rw_degradable(struct btrfs_fs_info *fs_info, in btrfs_check_rw_degradable() argument
7064 struct extent_map_tree *map_tree = &fs_info->mapping_tree; in btrfs_check_rw_degradable()
7099 btrfs_warn(fs_info, in btrfs_check_rw_degradable()
7127 readahead_tree_block(node->fs_info, start); in readahead_tree_node_children()
7131 int btrfs_read_chunk_tree(struct btrfs_fs_info *fs_info) in btrfs_read_chunk_tree() argument
7133 struct btrfs_root *root = fs_info->chunk_root; in btrfs_read_chunk_tree()
7159 fs_info->fs_devices->total_rw_bytes = 0; in btrfs_read_chunk_tree()
7209 mutex_lock(&fs_info->chunk_mutex); in btrfs_read_chunk_tree()
7211 mutex_unlock(&fs_info->chunk_mutex); in btrfs_read_chunk_tree()
7222 if (total_dev != fs_info->fs_devices->total_devices) { in btrfs_read_chunk_tree()
7223 btrfs_warn(fs_info, in btrfs_read_chunk_tree()
7225 btrfs_super_num_devices(fs_info->super_copy), in btrfs_read_chunk_tree()
7227 fs_info->fs_devices->total_devices = total_dev; in btrfs_read_chunk_tree()
7228 btrfs_set_super_num_devices(fs_info->super_copy, total_dev); in btrfs_read_chunk_tree()
7230 if (btrfs_super_total_bytes(fs_info->super_copy) < in btrfs_read_chunk_tree()
7231 fs_info->fs_devices->total_rw_bytes) { in btrfs_read_chunk_tree()
7232 btrfs_err(fs_info, in btrfs_read_chunk_tree()
7234 btrfs_super_total_bytes(fs_info->super_copy), in btrfs_read_chunk_tree()
7235 fs_info->fs_devices->total_rw_bytes); in btrfs_read_chunk_tree()
7247 void btrfs_init_devices_late(struct btrfs_fs_info *fs_info) in btrfs_init_devices_late() argument
7249 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices, *seed_devs; in btrfs_init_devices_late()
7252 fs_devices->fs_info = fs_info; in btrfs_init_devices_late()
7256 device->fs_info = fs_info; in btrfs_init_devices_late()
7260 device->fs_info = fs_info; in btrfs_init_devices_late()
7262 seed_devs->fs_info = fs_info; in btrfs_init_devices_late()
7302 ret = btrfs_search_slot(NULL, device->fs_info->dev_root, &key, path, 0, 0); in btrfs_device_init_dev_stats()
7331 int btrfs_init_dev_stats(struct btrfs_fs_info *fs_info) in btrfs_init_dev_stats() argument
7333 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices, *seed_devs; in btrfs_init_dev_stats()
7365 struct btrfs_fs_info *fs_info = trans->fs_info; in update_dev_stat_item() local
7366 struct btrfs_root *dev_root = fs_info->dev_root; in update_dev_stat_item()
7383 btrfs_warn_in_rcu(fs_info, in update_dev_stat_item()
7394 btrfs_warn_in_rcu(fs_info, in update_dev_stat_item()
7408 btrfs_warn_in_rcu(fs_info, in update_dev_stat_item()
7432 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_run_dev_stats() local
7433 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_run_dev_stats()
7477 btrfs_err_rl_in_rcu(dev->fs_info, in btrfs_dev_stat_print_on_error()
7497 btrfs_info_in_rcu(dev->fs_info, in btrfs_dev_stat_print_on_load()
7507 int btrfs_get_dev_stats(struct btrfs_fs_info *fs_info, in btrfs_get_dev_stats() argument
7511 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_get_dev_stats()
7515 dev = btrfs_find_device(fs_info->fs_devices, stats->devid, NULL, NULL, in btrfs_get_dev_stats()
7520 btrfs_warn(fs_info, "get dev_stats failed, device not found"); in btrfs_get_dev_stats()
7523 btrfs_warn(fs_info, "get dev_stats failed, not yet valid"); in btrfs_get_dev_stats()
7533 btrfs_info(fs_info, "device stats zeroed by %s (%d)", in btrfs_get_dev_stats()
7566 mutex_lock(&trans->fs_info->chunk_mutex); in btrfs_commit_device_sizes()
7573 mutex_unlock(&trans->fs_info->chunk_mutex); in btrfs_commit_device_sizes()
7588 static int verify_one_dev_extent(struct btrfs_fs_info *fs_info, in verify_one_dev_extent() argument
7592 struct extent_map_tree *em_tree = &fs_info->mapping_tree; in verify_one_dev_extent()
7606 btrfs_err(fs_info, in verify_one_dev_extent()
7616 btrfs_err(fs_info, in verify_one_dev_extent()
7629 btrfs_err(fs_info, in verify_one_dev_extent()
7640 btrfs_err(fs_info, in verify_one_dev_extent()
7647 dev = btrfs_find_device(fs_info->fs_devices, devid, NULL, NULL, true); in verify_one_dev_extent()
7649 btrfs_err(fs_info, "failed to find devid %llu", devid); in verify_one_dev_extent()
7658 devs = list_first_entry(&fs_info->fs_devices->seed_list, in verify_one_dev_extent()
7662 btrfs_err(fs_info, "failed to find seed devid %llu", in verify_one_dev_extent()
7670 btrfs_err(fs_info, in verify_one_dev_extent()
7682 static int verify_chunk_dev_extent_mapping(struct btrfs_fs_info *fs_info) in verify_chunk_dev_extent_mapping() argument
7684 struct extent_map_tree *em_tree = &fs_info->mapping_tree; in verify_chunk_dev_extent_mapping()
7694 btrfs_err(fs_info, in verify_chunk_dev_extent_mapping()
7714 int btrfs_verify_dev_extents(struct btrfs_fs_info *fs_info) in btrfs_verify_dev_extents() argument
7717 struct btrfs_root *root = fs_info->dev_root; in btrfs_verify_dev_extents()
7767 btrfs_err(fs_info, in btrfs_verify_dev_extents()
7774 ret = verify_one_dev_extent(fs_info, chunk_offset, devid, in btrfs_verify_dev_extents()
7791 ret = verify_chunk_dev_extent_mapping(fs_info); in btrfs_verify_dev_extents()
7801 bool btrfs_pinned_by_swapfile(struct btrfs_fs_info *fs_info, void *ptr) in btrfs_pinned_by_swapfile() argument
7806 spin_lock(&fs_info->swapfile_pins_lock); in btrfs_pinned_by_swapfile()
7807 node = fs_info->swapfile_pins.rb_node; in btrfs_pinned_by_swapfile()
7817 spin_unlock(&fs_info->swapfile_pins_lock); in btrfs_pinned_by_swapfile()