Lines Matching refs:fs_info

248 static int btrfs_relocate_sys_chunks(struct btrfs_fs_info *fs_info);
251 static int __btrfs_map_block(struct btrfs_fs_info *fs_info,
953 btrfs_info_in_rcu(device->fs_info, in device_list_add()
1143 device->fs_info = NULL; in btrfs_close_one_device()
1184 fs_devices->fs_info = NULL; in close_fs_devices()
1407 lockdep_assert_held(&device->fs_info->chunk_mutex); in contains_pending_extent()
1574 struct btrfs_fs_info *fs_info = device->fs_info; in find_free_dev_extent_start() local
1575 struct btrfs_root *root = fs_info->dev_root; in find_free_dev_extent_start()
1721 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_free_dev_extent() local
1722 struct btrfs_root *root = fs_info->dev_root; in btrfs_free_dev_extent()
1771 static u64 find_next_chunk(struct btrfs_fs_info *fs_info) in find_next_chunk() argument
1778 em_tree = &fs_info->mapping_tree; in find_next_chunk()
1790 static noinline int find_next_devid(struct btrfs_fs_info *fs_info, in find_next_devid() argument
1806 ret = btrfs_search_slot(NULL, fs_info->chunk_root, &key, path, 0, 0); in find_next_devid()
1812 btrfs_err(fs_info, "corrupted chunk tree devid -1 matched"); in find_next_devid()
1817 ret = btrfs_previous_item(fs_info->chunk_root, path, in find_next_devid()
1856 ret = btrfs_insert_empty_item(trans, trans->fs_info->chunk_root, path, in btrfs_add_dev_item()
1883 write_extent_buffer(leaf, trans->fs_info->fs_devices->metadata_uuid, in btrfs_add_dev_item()
1916 struct btrfs_root *root = device->fs_info->chunk_root; in btrfs_rm_dev_item()
1964 static int btrfs_check_raid_min_devices(struct btrfs_fs_info *fs_info, in btrfs_check_raid_min_devices() argument
1972 seq = read_seqbegin(&fs_info->profiles_lock); in btrfs_check_raid_min_devices()
1974 all_avail = fs_info->avail_data_alloc_bits | in btrfs_check_raid_min_devices()
1975 fs_info->avail_system_alloc_bits | in btrfs_check_raid_min_devices()
1976 fs_info->avail_metadata_alloc_bits; in btrfs_check_raid_min_devices()
1977 } while (read_seqretry(&fs_info->profiles_lock, seq)); in btrfs_check_raid_min_devices()
2014 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_assign_next_active_device() local
2017 next_device = btrfs_find_next_active_device(fs_info->fs_devices, in btrfs_assign_next_active_device()
2021 if (fs_info->sb->s_bdev && in btrfs_assign_next_active_device()
2022 (fs_info->sb->s_bdev == device->bdev)) in btrfs_assign_next_active_device()
2023 fs_info->sb->s_bdev = next_device->bdev; in btrfs_assign_next_active_device()
2025 if (fs_info->fs_devices->latest_dev->bdev == device->bdev) in btrfs_assign_next_active_device()
2026 fs_info->fs_devices->latest_dev = next_device; in btrfs_assign_next_active_device()
2033 static u64 btrfs_num_devices(struct btrfs_fs_info *fs_info) in btrfs_num_devices() argument
2035 u64 num_devices = fs_info->fs_devices->num_devices; in btrfs_num_devices()
2037 down_read(&fs_info->dev_replace.rwsem); in btrfs_num_devices()
2038 if (btrfs_dev_replace_is_ongoing(&fs_info->dev_replace)) { in btrfs_num_devices()
2042 up_read(&fs_info->dev_replace.rwsem); in btrfs_num_devices()
2047 void btrfs_scratch_superblocks(struct btrfs_fs_info *fs_info, in btrfs_scratch_superblocks() argument
2078 btrfs_warn(fs_info, in btrfs_scratch_superblocks()
2092 int btrfs_rm_device(struct btrfs_fs_info *fs_info, in btrfs_rm_device() argument
2098 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_rm_device()
2107 num_devices = btrfs_num_devices(fs_info); in btrfs_rm_device()
2109 ret = btrfs_check_raid_min_devices(fs_info, num_devices - 1); in btrfs_rm_device()
2113 device = btrfs_find_device(fs_info->fs_devices, args); in btrfs_rm_device()
2122 if (btrfs_pinned_by_swapfile(fs_info, device)) { in btrfs_rm_device()
2123 btrfs_warn_in_rcu(fs_info, in btrfs_rm_device()
2136 fs_info->fs_devices->rw_devices == 1) { in btrfs_rm_device()
2142 mutex_lock(&fs_info->chunk_mutex); in btrfs_rm_device()
2145 mutex_unlock(&fs_info->chunk_mutex); in btrfs_rm_device()
2202 num_devices = btrfs_super_num_devices(fs_info->super_copy) - 1; in btrfs_rm_device()
2203 btrfs_set_super_num_devices(fs_info->super_copy, num_devices); in btrfs_rm_device()
2217 btrfs_scratch_superblocks(fs_info, device->bdev, in btrfs_rm_device()
2250 mutex_lock(&fs_info->chunk_mutex); in btrfs_rm_device()
2254 mutex_unlock(&fs_info->chunk_mutex); in btrfs_rm_device()
2263 lockdep_assert_held(&srcdev->fs_info->fs_devices->device_list_mutex); in btrfs_rm_dev_replace_remove_srcdev()
2315 struct btrfs_fs_devices *fs_devices = tgtdev->fs_info->fs_devices; in btrfs_destroy_dev_replace_tgtdev()
2332 btrfs_scratch_superblocks(tgtdev->fs_info, tgtdev->bdev, in btrfs_destroy_dev_replace_tgtdev()
2358 int btrfs_get_dev_args_from_path(struct btrfs_fs_info *fs_info, in btrfs_get_dev_args_from_path() argument
2380 ret = btrfs_get_bdev_and_sb(path, FMODE_READ, fs_info->bdev_holder, 0, in btrfs_get_dev_args_from_path()
2386 if (btrfs_fs_incompat(fs_info, METADATA_UUID)) in btrfs_get_dev_args_from_path()
2409 struct btrfs_fs_info *fs_info, u64 devid, in btrfs_find_device_by_devspec() argument
2418 device = btrfs_find_device(fs_info->fs_devices, &args); in btrfs_find_device_by_devspec()
2424 ret = btrfs_get_dev_args_from_path(fs_info, &args, device_path); in btrfs_find_device_by_devspec()
2427 device = btrfs_find_device(fs_info->fs_devices, &args); in btrfs_find_device_by_devspec()
2437 static int btrfs_prepare_sprout(struct btrfs_fs_info *fs_info) in btrfs_prepare_sprout() argument
2439 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_prepare_sprout()
2442 struct btrfs_super_block *disk_super = fs_info->super_copy; in btrfs_prepare_sprout()
2509 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_finish_sprout() local
2510 struct btrfs_root *root = fs_info->chunk_root; in btrfs_finish_sprout()
2563 device = btrfs_find_device(fs_info->fs_devices, &args); in btrfs_finish_sprout()
2581 int btrfs_init_new_device(struct btrfs_fs_info *fs_info, const char *device_path) in btrfs_init_new_device() argument
2583 struct btrfs_root *root = fs_info->dev_root; in btrfs_init_new_device()
2588 struct super_block *sb = fs_info->sb; in btrfs_init_new_device()
2590 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_new_device()
2601 fs_info->bdev_holder); in btrfs_init_new_device()
2605 if (!btrfs_check_device_zone_type(fs_info, bdev)) { in btrfs_init_new_device()
2629 device = btrfs_alloc_device(fs_info, NULL, NULL); in btrfs_init_new_device()
2643 device->fs_info = fs_info; in btrfs_init_new_device()
2659 device->io_width = fs_info->sectorsize; in btrfs_init_new_device()
2660 device->io_align = fs_info->sectorsize; in btrfs_init_new_device()
2661 device->sector_size = fs_info->sectorsize; in btrfs_init_new_device()
2663 round_down(bdev_nr_bytes(bdev), fs_info->sectorsize); in btrfs_init_new_device()
2674 ret = btrfs_prepare_sprout(fs_info); in btrfs_init_new_device()
2679 btrfs_assign_next_active_device(fs_info->fs_devices->latest_dev, in btrfs_init_new_device()
2686 mutex_lock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2695 atomic64_add(device->total_bytes, &fs_info->free_chunk_space); in btrfs_init_new_device()
2700 orig_super_total_bytes = btrfs_super_total_bytes(fs_info->super_copy); in btrfs_init_new_device()
2701 btrfs_set_super_total_bytes(fs_info->super_copy, in btrfs_init_new_device()
2703 fs_info->sectorsize)); in btrfs_init_new_device()
2705 orig_super_num_devices = btrfs_super_num_devices(fs_info->super_copy); in btrfs_init_new_device()
2706 btrfs_set_super_num_devices(fs_info->super_copy, in btrfs_init_new_device()
2713 btrfs_clear_space_info_full(fs_info); in btrfs_init_new_device()
2715 mutex_unlock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2723 mutex_lock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2725 mutex_unlock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2762 ret = btrfs_relocate_sys_chunks(fs_info); in btrfs_init_new_device()
2764 btrfs_handle_fs_error(fs_info, ret, in btrfs_init_new_device()
2793 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2794 mutex_lock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2797 fs_info->fs_devices->num_devices--; in btrfs_init_new_device()
2798 fs_info->fs_devices->open_devices--; in btrfs_init_new_device()
2799 fs_info->fs_devices->rw_devices--; in btrfs_init_new_device()
2800 fs_info->fs_devices->total_devices--; in btrfs_init_new_device()
2801 fs_info->fs_devices->total_rw_bytes -= device->total_bytes; in btrfs_init_new_device()
2802 atomic64_sub(device->total_bytes, &fs_info->free_chunk_space); in btrfs_init_new_device()
2803 btrfs_set_super_total_bytes(fs_info->super_copy, in btrfs_init_new_device()
2805 btrfs_set_super_num_devices(fs_info->super_copy, in btrfs_init_new_device()
2807 mutex_unlock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2808 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2832 struct btrfs_root *root = device->fs_info->chunk_root; in btrfs_update_device()
2876 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_grow_device() local
2877 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_grow_device()
2885 new_size = round_down(new_size, fs_info->sectorsize); in btrfs_grow_device()
2887 mutex_lock(&fs_info->chunk_mutex); in btrfs_grow_device()
2889 diff = round_down(new_size - device->total_bytes, fs_info->sectorsize); in btrfs_grow_device()
2893 mutex_unlock(&fs_info->chunk_mutex); in btrfs_grow_device()
2898 round_down(old_total + diff, fs_info->sectorsize)); in btrfs_grow_device()
2903 btrfs_clear_space_info_full(device->fs_info); in btrfs_grow_device()
2907 mutex_unlock(&fs_info->chunk_mutex); in btrfs_grow_device()
2918 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_free_chunk() local
2919 struct btrfs_root *root = fs_info->chunk_root; in btrfs_free_chunk()
2936 btrfs_handle_fs_error(fs_info, -ENOENT, in btrfs_free_chunk()
2944 btrfs_handle_fs_error(fs_info, ret, in btrfs_free_chunk()
2951 static int btrfs_del_sys_chunk(struct btrfs_fs_info *fs_info, u64 chunk_offset) in btrfs_del_sys_chunk() argument
2953 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_del_sys_chunk()
2964 lockdep_assert_held(&fs_info->chunk_mutex); in btrfs_del_sys_chunk()
3004 struct extent_map *btrfs_get_chunk_map(struct btrfs_fs_info *fs_info, in btrfs_get_chunk_map() argument
3010 em_tree = &fs_info->mapping_tree; in btrfs_get_chunk_map()
3016 btrfs_crit(fs_info, "unable to find logical %llu length %llu", in btrfs_get_chunk_map()
3022 btrfs_crit(fs_info, in btrfs_get_chunk_map()
3043 lockdep_assert_held(&trans->fs_info->chunk_mutex); in remove_chunk_item()
3058 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_remove_chunk() local
3063 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_remove_chunk()
3065 em = btrfs_get_chunk_map(fs_info, chunk_offset, 1); in btrfs_remove_chunk()
3100 mutex_lock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
3103 atomic64_add(dev_extent_len, &fs_info->free_chunk_space); in btrfs_remove_chunk()
3104 btrfs_clear_space_info_full(fs_info); in btrfs_remove_chunk()
3105 mutex_unlock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
3132 mutex_lock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
3152 const u64 sys_flags = btrfs_system_alloc_profile(fs_info); in btrfs_remove_chunk()
3178 trace_btrfs_chunk_free(fs_info, map, chunk_offset, em->len); in btrfs_remove_chunk()
3181 ret = btrfs_del_sys_chunk(fs_info, chunk_offset); in btrfs_remove_chunk()
3188 mutex_unlock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
3205 mutex_unlock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
3213 int btrfs_relocate_chunk(struct btrfs_fs_info *fs_info, u64 chunk_offset) in btrfs_relocate_chunk() argument
3215 struct btrfs_root *root = fs_info->chunk_root; in btrfs_relocate_chunk()
3233 lockdep_assert_held(&fs_info->reclaim_bgs_lock); in btrfs_relocate_chunk()
3236 btrfs_scrub_pause(fs_info); in btrfs_relocate_chunk()
3237 ret = btrfs_relocate_block_group(fs_info, chunk_offset); in btrfs_relocate_chunk()
3238 btrfs_scrub_continue(fs_info); in btrfs_relocate_chunk()
3242 block_group = btrfs_lookup_block_group(fs_info, chunk_offset); in btrfs_relocate_chunk()
3245 btrfs_discard_cancel_work(&fs_info->discard_ctl, block_group); in btrfs_relocate_chunk()
3255 if (btrfs_is_zoned(fs_info)) { in btrfs_relocate_chunk()
3256 ret = btrfs_discard_extent(fs_info, chunk_offset, length, NULL); in btrfs_relocate_chunk()
3258 btrfs_info(fs_info, in btrfs_relocate_chunk()
3263 trans = btrfs_start_trans_remove_block_group(root->fs_info, in btrfs_relocate_chunk()
3267 btrfs_handle_fs_error(root->fs_info, ret, NULL); in btrfs_relocate_chunk()
3280 static int btrfs_relocate_sys_chunks(struct btrfs_fs_info *fs_info) in btrfs_relocate_sys_chunks() argument
3282 struct btrfs_root *chunk_root = fs_info->chunk_root; in btrfs_relocate_sys_chunks()
3303 mutex_lock(&fs_info->reclaim_bgs_lock); in btrfs_relocate_sys_chunks()
3306 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_relocate_sys_chunks()
3314 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_relocate_sys_chunks()
3329 ret = btrfs_relocate_chunk(fs_info, found_key.offset); in btrfs_relocate_sys_chunks()
3335 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_relocate_sys_chunks()
3359 static int btrfs_may_alloc_data_chunk(struct btrfs_fs_info *fs_info, in btrfs_may_alloc_data_chunk() argument
3366 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in btrfs_may_alloc_data_chunk()
3374 spin_lock(&fs_info->data_sinfo->lock); in btrfs_may_alloc_data_chunk()
3375 bytes_used = fs_info->data_sinfo->bytes_used; in btrfs_may_alloc_data_chunk()
3376 spin_unlock(&fs_info->data_sinfo->lock); in btrfs_may_alloc_data_chunk()
3382 trans = btrfs_join_transaction(fs_info->tree_root); in btrfs_may_alloc_data_chunk()
3396 static int insert_balance_item(struct btrfs_fs_info *fs_info, in insert_balance_item() argument
3399 struct btrfs_root *root = fs_info->tree_root; in insert_balance_item()
3450 static int del_balance_item(struct btrfs_fs_info *fs_info) in del_balance_item() argument
3452 struct btrfs_root *root = fs_info->tree_root; in del_balance_item()
3535 static void reset_balance_state(struct btrfs_fs_info *fs_info) in reset_balance_state() argument
3537 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in reset_balance_state()
3540 BUG_ON(!fs_info->balance_ctl); in reset_balance_state()
3542 spin_lock(&fs_info->balance_lock); in reset_balance_state()
3543 fs_info->balance_ctl = NULL; in reset_balance_state()
3544 spin_unlock(&fs_info->balance_lock); in reset_balance_state()
3547 ret = del_balance_item(fs_info); in reset_balance_state()
3549 btrfs_handle_fs_error(fs_info, ret, NULL); in reset_balance_state()
3568 static int chunk_usage_range_filter(struct btrfs_fs_info *fs_info, u64 chunk_offset, in chunk_usage_range_filter() argument
3577 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in chunk_usage_range_filter()
3601 static int chunk_usage_filter(struct btrfs_fs_info *fs_info, in chunk_usage_filter() argument
3608 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in chunk_usage_filter()
3732 struct btrfs_fs_info *fs_info = leaf->fs_info; in should_balance_chunk() local
3733 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in should_balance_chunk()
3758 chunk_usage_filter(fs_info, chunk_offset, bargs)) { in should_balance_chunk()
3761 chunk_usage_range_filter(fs_info, chunk_offset, bargs)) { in should_balance_chunk()
3818 static int __btrfs_balance(struct btrfs_fs_info *fs_info) in __btrfs_balance() argument
3820 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in __btrfs_balance()
3821 struct btrfs_root *chunk_root = fs_info->chunk_root; in __btrfs_balance()
3848 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3850 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3866 if ((!counting && atomic_read(&fs_info->balance_pause_req)) || in __btrfs_balance()
3867 atomic_read(&fs_info->balance_cancel_req)) { in __btrfs_balance()
3872 mutex_lock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
3875 mutex_unlock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
3889 mutex_unlock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
3899 mutex_unlock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
3907 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3909 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3916 mutex_unlock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
3921 mutex_unlock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
3922 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3924 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3946 mutex_unlock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
3957 ret = btrfs_may_alloc_data_chunk(fs_info, in __btrfs_balance()
3960 mutex_unlock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
3967 ret = btrfs_relocate_chunk(fs_info, found_key.offset); in __btrfs_balance()
3968 mutex_unlock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
3972 btrfs_info(fs_info, in __btrfs_balance()
3979 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3981 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3997 btrfs_info(fs_info, "%d enospc errors during balance", in __btrfs_balance()
4029 static inline int balance_need_close(struct btrfs_fs_info *fs_info) in balance_need_close() argument
4032 return atomic_read(&fs_info->balance_cancel_req) || in balance_need_close()
4033 (atomic_read(&fs_info->balance_pause_req) == 0 && in balance_need_close()
4034 atomic_read(&fs_info->balance_cancel_req) == 0); in balance_need_close()
4041 static inline int validate_convert_profile(struct btrfs_fs_info *fs_info, in validate_convert_profile() argument
4048 if (fs_info->sectorsize < PAGE_SIZE && in validate_convert_profile()
4050 btrfs_err(fs_info, in validate_convert_profile()
4052 fs_info->sectorsize, PAGE_SIZE); in validate_convert_profile()
4060 btrfs_err(fs_info, "balance: invalid convert %s profile %s", in validate_convert_profile()
4163 static void describe_balance_start_or_resume(struct btrfs_fs_info *fs_info) in describe_balance_start_or_resume() argument
4171 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in describe_balance_start_or_resume()
4212 btrfs_info(fs_info, "balance: %s %s", in describe_balance_start_or_resume()
4222 int btrfs_balance(struct btrfs_fs_info *fs_info, in btrfs_balance() argument
4235 if (btrfs_fs_closing(fs_info) || in btrfs_balance()
4236 atomic_read(&fs_info->balance_pause_req) || in btrfs_balance()
4237 btrfs_should_cancel_balance(fs_info)) { in btrfs_balance()
4242 allowed = btrfs_super_incompat_flags(fs_info->super_copy); in btrfs_balance()
4255 btrfs_err(fs_info, in btrfs_balance()
4266 num_devices = fs_info->fs_devices->rw_devices; in btrfs_balance()
4278 if (!validate_convert_profile(fs_info, &bctl->data, allowed, "data") || in btrfs_balance()
4279 !validate_convert_profile(fs_info, &bctl->meta, allowed, "metadata") || in btrfs_balance()
4280 !validate_convert_profile(fs_info, &bctl->sys, allowed, "system")) { in btrfs_balance()
4296 seq = read_seqbegin(&fs_info->profiles_lock); in btrfs_balance()
4299 (fs_info->avail_system_alloc_bits & allowed) && in btrfs_balance()
4302 (fs_info->avail_metadata_alloc_bits & allowed) && in btrfs_balance()
4310 bctl->meta.target : fs_info->avail_metadata_alloc_bits; in btrfs_balance()
4312 bctl->data.target : fs_info->avail_data_alloc_bits; in btrfs_balance()
4313 } while (read_seqretry(&fs_info->profiles_lock, seq)); in btrfs_balance()
4317 btrfs_info(fs_info, in btrfs_balance()
4320 btrfs_err(fs_info, in btrfs_balance()
4329 btrfs_warn(fs_info, in btrfs_balance()
4335 ret = insert_balance_item(fs_info, bctl); in btrfs_balance()
4341 BUG_ON(fs_info->balance_ctl); in btrfs_balance()
4342 spin_lock(&fs_info->balance_lock); in btrfs_balance()
4343 fs_info->balance_ctl = bctl; in btrfs_balance()
4344 spin_unlock(&fs_info->balance_lock); in btrfs_balance()
4347 spin_lock(&fs_info->balance_lock); in btrfs_balance()
4349 spin_unlock(&fs_info->balance_lock); in btrfs_balance()
4352 ASSERT(!test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_balance()
4353 set_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags); in btrfs_balance()
4354 describe_balance_start_or_resume(fs_info); in btrfs_balance()
4355 mutex_unlock(&fs_info->balance_mutex); in btrfs_balance()
4357 ret = __btrfs_balance(fs_info); in btrfs_balance()
4359 mutex_lock(&fs_info->balance_mutex); in btrfs_balance()
4360 if (ret == -ECANCELED && atomic_read(&fs_info->balance_pause_req)) in btrfs_balance()
4361 btrfs_info(fs_info, "balance: paused"); in btrfs_balance()
4378 btrfs_info(fs_info, "balance: canceled"); in btrfs_balance()
4380 btrfs_info(fs_info, "balance: ended with status: %d", ret); in btrfs_balance()
4382 clear_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags); in btrfs_balance()
4386 btrfs_update_ioctl_balance_args(fs_info, bargs); in btrfs_balance()
4390 balance_need_close(fs_info)) { in btrfs_balance()
4391 reset_balance_state(fs_info); in btrfs_balance()
4392 btrfs_exclop_finish(fs_info); in btrfs_balance()
4395 wake_up(&fs_info->balance_wait_q); in btrfs_balance()
4400 reset_balance_state(fs_info); in btrfs_balance()
4403 btrfs_exclop_finish(fs_info); in btrfs_balance()
4410 struct btrfs_fs_info *fs_info = data; in balance_kthread() local
4413 mutex_lock(&fs_info->balance_mutex); in balance_kthread()
4414 if (fs_info->balance_ctl) in balance_kthread()
4415 ret = btrfs_balance(fs_info, fs_info->balance_ctl, NULL); in balance_kthread()
4416 mutex_unlock(&fs_info->balance_mutex); in balance_kthread()
4421 int btrfs_resume_balance_async(struct btrfs_fs_info *fs_info) in btrfs_resume_balance_async() argument
4425 mutex_lock(&fs_info->balance_mutex); in btrfs_resume_balance_async()
4426 if (!fs_info->balance_ctl) { in btrfs_resume_balance_async()
4427 mutex_unlock(&fs_info->balance_mutex); in btrfs_resume_balance_async()
4430 mutex_unlock(&fs_info->balance_mutex); in btrfs_resume_balance_async()
4432 if (btrfs_test_opt(fs_info, SKIP_BALANCE)) { in btrfs_resume_balance_async()
4433 btrfs_info(fs_info, "balance: resume skipped"); in btrfs_resume_balance_async()
4442 spin_lock(&fs_info->balance_lock); in btrfs_resume_balance_async()
4443 fs_info->balance_ctl->flags |= BTRFS_BALANCE_RESUME; in btrfs_resume_balance_async()
4444 spin_unlock(&fs_info->balance_lock); in btrfs_resume_balance_async()
4446 tsk = kthread_run(balance_kthread, fs_info, "btrfs-balance"); in btrfs_resume_balance_async()
4450 int btrfs_recover_balance(struct btrfs_fs_info *fs_info) in btrfs_recover_balance() argument
4468 ret = btrfs_search_slot(NULL, fs_info->tree_root, &key, path, 0, 0); in btrfs_recover_balance()
4505 if (!btrfs_exclop_start(fs_info, BTRFS_EXCLOP_BALANCE)) in btrfs_recover_balance()
4506 btrfs_warn(fs_info, in btrfs_recover_balance()
4511 mutex_lock(&fs_info->balance_mutex); in btrfs_recover_balance()
4512 BUG_ON(fs_info->balance_ctl); in btrfs_recover_balance()
4513 spin_lock(&fs_info->balance_lock); in btrfs_recover_balance()
4514 fs_info->balance_ctl = bctl; in btrfs_recover_balance()
4515 spin_unlock(&fs_info->balance_lock); in btrfs_recover_balance()
4516 mutex_unlock(&fs_info->balance_mutex); in btrfs_recover_balance()
4522 int btrfs_pause_balance(struct btrfs_fs_info *fs_info) in btrfs_pause_balance() argument
4526 mutex_lock(&fs_info->balance_mutex); in btrfs_pause_balance()
4527 if (!fs_info->balance_ctl) { in btrfs_pause_balance()
4528 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
4532 if (test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)) { in btrfs_pause_balance()
4533 atomic_inc(&fs_info->balance_pause_req); in btrfs_pause_balance()
4534 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
4536 wait_event(fs_info->balance_wait_q, in btrfs_pause_balance()
4537 !test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_pause_balance()
4539 mutex_lock(&fs_info->balance_mutex); in btrfs_pause_balance()
4541 BUG_ON(test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_pause_balance()
4542 atomic_dec(&fs_info->balance_pause_req); in btrfs_pause_balance()
4547 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
4551 int btrfs_cancel_balance(struct btrfs_fs_info *fs_info) in btrfs_cancel_balance() argument
4553 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4554 if (!fs_info->balance_ctl) { in btrfs_cancel_balance()
4555 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4564 if (sb_rdonly(fs_info->sb)) { in btrfs_cancel_balance()
4565 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4569 atomic_inc(&fs_info->balance_cancel_req); in btrfs_cancel_balance()
4574 if (test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)) { in btrfs_cancel_balance()
4575 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4576 wait_event(fs_info->balance_wait_q, in btrfs_cancel_balance()
4577 !test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_cancel_balance()
4578 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4580 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4585 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4587 if (fs_info->balance_ctl) { in btrfs_cancel_balance()
4588 reset_balance_state(fs_info); in btrfs_cancel_balance()
4589 btrfs_exclop_finish(fs_info); in btrfs_cancel_balance()
4590 btrfs_info(fs_info, "balance: canceled"); in btrfs_cancel_balance()
4594 BUG_ON(fs_info->balance_ctl || in btrfs_cancel_balance()
4595 test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_cancel_balance()
4596 atomic_dec(&fs_info->balance_cancel_req); in btrfs_cancel_balance()
4597 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4603 struct btrfs_fs_info *fs_info = data; in btrfs_uuid_scan_kthread() local
4604 struct btrfs_root *root = fs_info->tree_root; in btrfs_uuid_scan_kthread()
4626 if (btrfs_fs_closing(fs_info)) { in btrfs_uuid_scan_kthread()
4666 trans = btrfs_start_transaction(fs_info->uuid_root, 2); in btrfs_uuid_scan_kthread()
4682 btrfs_warn(fs_info, "uuid_tree_add failed %d", in btrfs_uuid_scan_kthread()
4694 btrfs_warn(fs_info, "uuid_tree_add failed %d", in btrfs_uuid_scan_kthread()
4729 btrfs_warn(fs_info, "btrfs_uuid_scan_kthread failed %d", ret); in btrfs_uuid_scan_kthread()
4731 set_bit(BTRFS_FS_UPDATE_UUID_TREE_GEN, &fs_info->flags); in btrfs_uuid_scan_kthread()
4732 up(&fs_info->uuid_tree_rescan_sem); in btrfs_uuid_scan_kthread()
4736 int btrfs_create_uuid_tree(struct btrfs_fs_info *fs_info) in btrfs_create_uuid_tree() argument
4739 struct btrfs_root *tree_root = fs_info->tree_root; in btrfs_create_uuid_tree()
4760 fs_info->uuid_root = uuid_root; in btrfs_create_uuid_tree()
4766 down(&fs_info->uuid_tree_rescan_sem); in btrfs_create_uuid_tree()
4767 task = kthread_run(btrfs_uuid_scan_kthread, fs_info, "btrfs-uuid"); in btrfs_create_uuid_tree()
4770 btrfs_warn(fs_info, "failed to start uuid_scan task"); in btrfs_create_uuid_tree()
4771 up(&fs_info->uuid_tree_rescan_sem); in btrfs_create_uuid_tree()
4785 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_shrink_device() local
4786 struct btrfs_root *root = fs_info->dev_root; in btrfs_shrink_device()
4798 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_shrink_device()
4804 new_size = round_down(new_size, fs_info->sectorsize); in btrfs_shrink_device()
4806 diff = round_down(old_size - new_size, fs_info->sectorsize); in btrfs_shrink_device()
4823 mutex_lock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4828 atomic64_sub(diff, &fs_info->free_chunk_space); in btrfs_shrink_device()
4837 mutex_unlock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4842 mutex_unlock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4852 mutex_lock(&fs_info->reclaim_bgs_lock); in btrfs_shrink_device()
4855 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_shrink_device()
4861 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_shrink_device()
4874 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_shrink_device()
4883 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_shrink_device()
4897 ret = btrfs_may_alloc_data_chunk(fs_info, chunk_offset); in btrfs_shrink_device()
4899 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_shrink_device()
4903 ret = btrfs_relocate_chunk(fs_info, chunk_offset); in btrfs_shrink_device()
4904 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_shrink_device()
4909 btrfs_warn(fs_info, in btrfs_shrink_device()
4933 mutex_lock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4945 round_down(old_total - diff, fs_info->sectorsize)); in btrfs_shrink_device()
4946 mutex_unlock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4961 mutex_lock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4965 atomic64_add(diff, &fs_info->free_chunk_space); in btrfs_shrink_device()
4966 mutex_unlock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4971 static int btrfs_add_system_chunk(struct btrfs_fs_info *fs_info, in btrfs_add_system_chunk() argument
4975 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_add_system_chunk()
4980 lockdep_assert_held(&fs_info->chunk_mutex); in btrfs_add_system_chunk()
5099 u64 zone_size = fs_devices->fs_info->zone_size; in init_alloc_chunk_ctl_policy_zoned()
5137 ctl->devs_max = BTRFS_MAX_DEVS(fs_devices->fs_info); in init_alloc_chunk_ctl()
5160 struct btrfs_fs_info *info = fs_devices->fs_info; in gather_device_info()
5313 struct btrfs_fs_info *info = fs_devices->fs_info; in decide_stripe_size()
5347 struct btrfs_fs_info *info = trans->fs_info; in create_chunk()
5441 struct btrfs_fs_info *info = trans->fs_info; in btrfs_create_chunk()
5506 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_chunk_alloc_add_chunk_item() local
5507 struct btrfs_root *extent_root = fs_info->extent_root; in btrfs_chunk_alloc_add_chunk_item()
5508 struct btrfs_root *chunk_root = fs_info->chunk_root; in btrfs_chunk_alloc_add_chunk_item()
5540 lockdep_assert_held(&fs_info->chunk_mutex); in btrfs_chunk_alloc_add_chunk_item()
5542 em = btrfs_get_chunk_map(fs_info, bg->start, bg->length); in btrfs_chunk_alloc_add_chunk_item()
5585 btrfs_set_stack_chunk_sector_size(chunk, fs_info->sectorsize); in btrfs_chunk_alloc_add_chunk_item()
5599 ret = btrfs_add_system_chunk(fs_info, &key, chunk, item_size); in btrfs_chunk_alloc_add_chunk_item()
5612 struct btrfs_fs_info *fs_info = trans->fs_info; in init_first_rw_device() local
5638 alloc_profile = btrfs_metadata_alloc_profile(fs_info); in init_first_rw_device()
5643 alloc_profile = btrfs_system_alloc_profile(fs_info); in init_first_rw_device()
5658 bool btrfs_chunk_writeable(struct btrfs_fs_info *fs_info, u64 chunk_offset) in btrfs_chunk_writeable() argument
5666 em = btrfs_get_chunk_map(fs_info, chunk_offset, 1); in btrfs_chunk_writeable()
5714 int btrfs_num_copies(struct btrfs_fs_info *fs_info, u64 logical, u64 len) in btrfs_num_copies() argument
5720 em = btrfs_get_chunk_map(fs_info, logical, len); in btrfs_num_copies()
5750 down_read(&fs_info->dev_replace.rwsem); in btrfs_num_copies()
5751 if (btrfs_dev_replace_is_ongoing(&fs_info->dev_replace) && in btrfs_num_copies()
5752 fs_info->dev_replace.tgtdev) in btrfs_num_copies()
5754 up_read(&fs_info->dev_replace.rwsem); in btrfs_num_copies()
5759 unsigned long btrfs_full_stripe_len(struct btrfs_fs_info *fs_info, in btrfs_full_stripe_len() argument
5764 unsigned long len = fs_info->sectorsize; in btrfs_full_stripe_len()
5766 em = btrfs_get_chunk_map(fs_info, logical, len); in btrfs_full_stripe_len()
5777 int btrfs_is_parity_mirror(struct btrfs_fs_info *fs_info, u64 logical, u64 len) in btrfs_is_parity_mirror() argument
5783 em = btrfs_get_chunk_map(fs_info, logical, len); in btrfs_is_parity_mirror()
5794 static int find_live_mirror(struct btrfs_fs_info *fs_info, in find_live_mirror() argument
5812 switch (fs_info->fs_devices->read_policy) { in find_live_mirror()
5815 btrfs_warn_rl(fs_info, in find_live_mirror()
5817 fs_info->fs_devices->read_policy); in find_live_mirror()
5818 fs_info->fs_devices->read_policy = BTRFS_READ_POLICY_PID; in find_live_mirror()
5826 fs_info->dev_replace.cont_reading_from_srcdev_mode == in find_live_mirror()
5828 srcdev = fs_info->dev_replace.srcdev; in find_live_mirror()
5873 static struct btrfs_io_context *alloc_btrfs_io_context(struct btrfs_fs_info *fs_info, in alloc_btrfs_io_context() argument
5894 bioc->fs_info = fs_info; in alloc_btrfs_io_context()
5920 static int __btrfs_map_block_for_discard(struct btrfs_fs_info *fs_info, in __btrfs_map_block_for_discard() argument
5948 em = btrfs_get_chunk_map(fs_info, logical, length); in __btrfs_map_block_for_discard()
6009 bioc = alloc_btrfs_io_context(fs_info, num_stripes, 0); in __btrfs_map_block_for_discard()
6079 static int get_extra_mirror_from_replace(struct btrfs_fs_info *fs_info, in get_extra_mirror_from_replace() argument
6092 ret = __btrfs_map_block(fs_info, BTRFS_MAP_GET_READ_MIRRORS, in get_extra_mirror_from_replace()
6143 static bool is_block_group_to_copy(struct btrfs_fs_info *fs_info, u64 logical) in is_block_group_to_copy() argument
6149 if (!btrfs_is_zoned(fs_info)) in is_block_group_to_copy()
6152 cache = btrfs_lookup_block_group(fs_info, logical); in is_block_group_to_copy()
6182 if (is_block_group_to_copy(dev_replace->srcdev->fs_info, logical)) in handle_ops_on_dev_replace()
6282 int btrfs_get_io_geometry(struct btrfs_fs_info *fs_info, struct extent_map *em, in btrfs_get_io_geometry() argument
6307 btrfs_crit(fs_info, in btrfs_get_io_geometry()
6360 static int __btrfs_map_block(struct btrfs_fs_info *fs_info, in __btrfs_map_block() argument
6379 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in __btrfs_map_block()
6390 em = btrfs_get_chunk_map(fs_info, logical, *length); in __btrfs_map_block()
6393 ret = btrfs_get_io_geometry(fs_info, em, op, logical, &geom); in __btrfs_map_block()
6417 ret = get_extra_mirror_from_replace(fs_info, logical, *length, in __btrfs_map_block()
6442 stripe_index = find_live_mirror(fs_info, map, 0, in __btrfs_map_block()
6468 stripe_index = find_live_mirror(fs_info, map, in __btrfs_map_block()
6515 btrfs_crit(fs_info, in __btrfs_map_block()
6531 bioc = alloc_btrfs_io_context(fs_info, num_alloc_stripes, tgtdev_indexes); in __btrfs_map_block()
6603 int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, in btrfs_map_block() argument
6608 return __btrfs_map_block_for_discard(fs_info, logical, in btrfs_map_block()
6611 return __btrfs_map_block(fs_info, op, logical, length, bioc_ret, in btrfs_map_block()
6616 int btrfs_map_sblock(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, in btrfs_map_sblock() argument
6620 return __btrfs_map_block(fs_info, op, logical, length, bioc_ret, 0, 1); in btrfs_map_sblock()
6659 btrfs_bio_counter_dec(bioc->fs_info); in btrfs_end_bio()
6690 struct btrfs_fs_info *fs_info = bioc->fs_info; in submit_stripe_bio() local
6702 u64 zone_start = round_down(physical, fs_info->zone_size); in submit_stripe_bio()
6710 btrfs_debug_in_rcu(fs_info, in submit_stripe_bio()
6717 btrfs_bio_counter_inc_noblocked(fs_info); in submit_stripe_bio()
6739 blk_status_t btrfs_map_bio(struct btrfs_fs_info *fs_info, struct bio *bio, in btrfs_map_bio() argument
6755 btrfs_bio_counter_inc_blocked(fs_info); in btrfs_map_bio()
6756 ret = __btrfs_map_block(fs_info, btrfs_op(bio), logical, in btrfs_map_bio()
6759 btrfs_bio_counter_dec(fs_info); in btrfs_map_bio()
6780 btrfs_bio_counter_dec(fs_info); in btrfs_map_bio()
6785 btrfs_crit(fs_info, in btrfs_map_bio()
6808 btrfs_bio_counter_dec(fs_info); in btrfs_map_bio()
6912 struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info, in btrfs_alloc_device() argument
6919 if (WARN_ON(!devid && !fs_info)) in btrfs_alloc_device()
6945 extent_io_tree_init(fs_info, &dev->alloc_state, in btrfs_alloc_device()
6953 ret = find_next_devid(fs_info, &tmp); in btrfs_alloc_device()
6969 static void btrfs_report_missing_device(struct btrfs_fs_info *fs_info, in btrfs_report_missing_device() argument
6973 btrfs_err_rl(fs_info, "devid %llu uuid %pU is missing", in btrfs_report_missing_device()
6976 btrfs_warn_rl(fs_info, "devid %llu uuid %pU is missing", in btrfs_report_missing_device()
6995 static int check_32bit_meta_chunk(struct btrfs_fs_info *fs_info, in check_32bit_meta_chunk() argument
7004 btrfs_err_32bit_limit(fs_info); in check_32bit_meta_chunk()
7014 static void warn_32bit_meta_chunk(struct btrfs_fs_info *fs_info, in warn_32bit_meta_chunk() argument
7023 btrfs_warn_32bit_limit(fs_info); in warn_32bit_meta_chunk()
7031 struct btrfs_fs_info *fs_info = leaf->fs_info; in read_one_chunk() local
7032 struct extent_map_tree *map_tree = &fs_info->mapping_tree; in read_one_chunk()
7050 ret = check_32bit_meta_chunk(fs_info, logical, length, type); in read_one_chunk()
7053 warn_32bit_meta_chunk(fs_info, logical, length, type); in read_one_chunk()
7113 map->stripes[i].dev = btrfs_find_device(fs_info->fs_devices, &args); in read_one_chunk()
7115 !btrfs_test_opt(fs_info, DEGRADED)) { in read_one_chunk()
7117 btrfs_report_missing_device(fs_info, devid, uuid, true); in read_one_chunk()
7122 add_missing_dev(fs_info->fs_devices, devid, in read_one_chunk()
7126 btrfs_err(fs_info, in read_one_chunk()
7131 btrfs_report_missing_device(fs_info, devid, uuid, false); in read_one_chunk()
7142 btrfs_err(fs_info, in read_one_chunk()
7174 static struct btrfs_fs_devices *open_seed_devices(struct btrfs_fs_info *fs_info, in open_seed_devices() argument
7184 list_for_each_entry(fs_devices, &fs_info->fs_devices->seed_list, seed_list) in open_seed_devices()
7191 if (!btrfs_test_opt(fs_info, DEGRADED)) in open_seed_devices()
7211 ret = open_fs_devices(fs_devices, FMODE_READ, fs_info->bdev_holder); in open_seed_devices()
7223 list_add(&fs_devices->seed_list, &fs_info->fs_devices->seed_list); in open_seed_devices()
7232 struct btrfs_fs_info *fs_info = leaf->fs_info; in read_one_dev() local
7233 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in read_one_dev()
7249 fs_devices = open_seed_devices(fs_info, fs_uuid); in read_one_dev()
7254 device = btrfs_find_device(fs_info->fs_devices, &args); in read_one_dev()
7256 if (!btrfs_test_opt(fs_info, DEGRADED)) { in read_one_dev()
7257 btrfs_report_missing_device(fs_info, devid, in read_one_dev()
7264 btrfs_err(fs_info, in read_one_dev()
7269 btrfs_report_missing_device(fs_info, devid, dev_uuid, false); in read_one_dev()
7272 if (!btrfs_test_opt(fs_info, DEGRADED)) { in read_one_dev()
7273 btrfs_report_missing_device(fs_info, in read_one_dev()
7277 btrfs_report_missing_device(fs_info, devid, in read_one_dev()
7309 if (device->fs_devices != fs_info->fs_devices) { in read_one_dev()
7321 btrfs_err(fs_info, in read_one_dev()
7332 &fs_info->free_chunk_space); in read_one_dev()
7338 int btrfs_read_sys_array(struct btrfs_fs_info *fs_info) in btrfs_read_sys_array() argument
7340 struct btrfs_root *root = fs_info->tree_root; in btrfs_read_sys_array()
7341 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_read_sys_array()
7355 ASSERT(BTRFS_SUPER_INFO_SIZE <= fs_info->nodesize); in btrfs_read_sys_array()
7361 sb = btrfs_find_create_tree_block(fs_info, BTRFS_SUPER_INFO_OFFSET, in btrfs_read_sys_array()
7401 btrfs_err(fs_info, in btrfs_read_sys_array()
7419 btrfs_err(fs_info, in btrfs_read_sys_array()
7428 btrfs_err(fs_info, in btrfs_read_sys_array()
7452 btrfs_err(fs_info, "sys_array too short to read %u bytes at offset %u", in btrfs_read_sys_array()
7467 bool btrfs_check_rw_degradable(struct btrfs_fs_info *fs_info, in btrfs_check_rw_degradable() argument
7470 struct extent_map_tree *map_tree = &fs_info->mapping_tree; in btrfs_check_rw_degradable()
7505 btrfs_warn(fs_info, in btrfs_check_rw_degradable()
7533 int btrfs_read_chunk_tree(struct btrfs_fs_info *fs_info) in btrfs_read_chunk_tree() argument
7535 struct btrfs_root *root = fs_info->chunk_root; in btrfs_read_chunk_tree()
7561 fs_info->fs_devices->total_rw_bytes = 0; in btrfs_read_chunk_tree()
7573 ASSERT(!test_bit(BTRFS_FS_OPEN, &fs_info->flags)); in btrfs_read_chunk_tree()
7640 if (total_dev != fs_info->fs_devices->total_devices) { in btrfs_read_chunk_tree()
7641 btrfs_err(fs_info, in btrfs_read_chunk_tree()
7643 btrfs_super_num_devices(fs_info->super_copy), in btrfs_read_chunk_tree()
7648 if (btrfs_super_total_bytes(fs_info->super_copy) < in btrfs_read_chunk_tree()
7649 fs_info->fs_devices->total_rw_bytes) { in btrfs_read_chunk_tree()
7650 btrfs_err(fs_info, in btrfs_read_chunk_tree()
7652 btrfs_super_total_bytes(fs_info->super_copy), in btrfs_read_chunk_tree()
7653 fs_info->fs_devices->total_rw_bytes); in btrfs_read_chunk_tree()
7665 void btrfs_init_devices_late(struct btrfs_fs_info *fs_info) in btrfs_init_devices_late() argument
7667 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices, *seed_devs; in btrfs_init_devices_late()
7670 fs_devices->fs_info = fs_info; in btrfs_init_devices_late()
7674 device->fs_info = fs_info; in btrfs_init_devices_late()
7678 device->fs_info = fs_info; in btrfs_init_devices_late()
7680 seed_devs->fs_info = fs_info; in btrfs_init_devices_late()
7717 if (!device->fs_info->dev_root) in btrfs_device_init_dev_stats()
7723 ret = btrfs_search_slot(NULL, device->fs_info->dev_root, &key, path, 0, 0); in btrfs_device_init_dev_stats()
7752 int btrfs_init_dev_stats(struct btrfs_fs_info *fs_info) in btrfs_init_dev_stats() argument
7754 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices, *seed_devs; in btrfs_init_dev_stats()
7786 struct btrfs_fs_info *fs_info = trans->fs_info; in update_dev_stat_item() local
7787 struct btrfs_root *dev_root = fs_info->dev_root; in update_dev_stat_item()
7804 btrfs_warn_in_rcu(fs_info, in update_dev_stat_item()
7815 btrfs_warn_in_rcu(fs_info, in update_dev_stat_item()
7829 btrfs_warn_in_rcu(fs_info, in update_dev_stat_item()
7853 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_run_dev_stats() local
7854 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_run_dev_stats()
7898 btrfs_err_rl_in_rcu(dev->fs_info, in btrfs_dev_stat_print_on_error()
7918 btrfs_info_in_rcu(dev->fs_info, in btrfs_dev_stat_print_on_load()
7928 int btrfs_get_dev_stats(struct btrfs_fs_info *fs_info, in btrfs_get_dev_stats() argument
7933 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_get_dev_stats()
7938 dev = btrfs_find_device(fs_info->fs_devices, &args); in btrfs_get_dev_stats()
7942 btrfs_warn(fs_info, "get dev_stats failed, device not found"); in btrfs_get_dev_stats()
7945 btrfs_warn(fs_info, "get dev_stats failed, not yet valid"); in btrfs_get_dev_stats()
7955 btrfs_info(fs_info, "device stats zeroed by %s (%d)", in btrfs_get_dev_stats()
7988 mutex_lock(&trans->fs_info->chunk_mutex); in btrfs_commit_device_sizes()
7995 mutex_unlock(&trans->fs_info->chunk_mutex); in btrfs_commit_device_sizes()
8010 static int verify_one_dev_extent(struct btrfs_fs_info *fs_info, in verify_one_dev_extent() argument
8015 struct extent_map_tree *em_tree = &fs_info->mapping_tree; in verify_one_dev_extent()
8029 btrfs_err(fs_info, in verify_one_dev_extent()
8039 btrfs_err(fs_info, in verify_one_dev_extent()
8052 btrfs_err(fs_info, in verify_one_dev_extent()
8063 btrfs_err(fs_info, in verify_one_dev_extent()
8070 dev = btrfs_find_device(fs_info->fs_devices, &args); in verify_one_dev_extent()
8072 btrfs_err(fs_info, "failed to find devid %llu", devid); in verify_one_dev_extent()
8078 btrfs_err(fs_info, in verify_one_dev_extent()
8091 btrfs_err(fs_info, in verify_one_dev_extent()
8104 static int verify_chunk_dev_extent_mapping(struct btrfs_fs_info *fs_info) in verify_chunk_dev_extent_mapping() argument
8106 struct extent_map_tree *em_tree = &fs_info->mapping_tree; in verify_chunk_dev_extent_mapping()
8116 btrfs_err(fs_info, in verify_chunk_dev_extent_mapping()
8136 int btrfs_verify_dev_extents(struct btrfs_fs_info *fs_info) in btrfs_verify_dev_extents() argument
8139 struct btrfs_root *root = fs_info->dev_root; in btrfs_verify_dev_extents()
8155 if (btrfs_test_opt(fs_info, IGNOREBADROOTS)) in btrfs_verify_dev_extents()
8202 btrfs_err(fs_info, in btrfs_verify_dev_extents()
8209 ret = verify_one_dev_extent(fs_info, chunk_offset, devid, in btrfs_verify_dev_extents()
8226 ret = verify_chunk_dev_extent_mapping(fs_info); in btrfs_verify_dev_extents()
8236 bool btrfs_pinned_by_swapfile(struct btrfs_fs_info *fs_info, void *ptr) in btrfs_pinned_by_swapfile() argument
8241 spin_lock(&fs_info->swapfile_pins_lock); in btrfs_pinned_by_swapfile()
8242 node = fs_info->swapfile_pins.rb_node; in btrfs_pinned_by_swapfile()
8252 spin_unlock(&fs_info->swapfile_pins_lock); in btrfs_pinned_by_swapfile()
8259 struct btrfs_fs_info *fs_info = cache->fs_info; in relocating_repair_kthread() local
8266 if (!btrfs_exclop_start(fs_info, BTRFS_EXCLOP_BALANCE)) { in relocating_repair_kthread()
8267 btrfs_info(fs_info, in relocating_repair_kthread()
8273 mutex_lock(&fs_info->reclaim_bgs_lock); in relocating_repair_kthread()
8276 cache = btrfs_lookup_block_group(fs_info, target); in relocating_repair_kthread()
8283 ret = btrfs_may_alloc_data_chunk(fs_info, target); in relocating_repair_kthread()
8287 btrfs_info(fs_info, in relocating_repair_kthread()
8290 ret = btrfs_relocate_chunk(fs_info, target); in relocating_repair_kthread()
8295 mutex_unlock(&fs_info->reclaim_bgs_lock); in relocating_repair_kthread()
8296 btrfs_exclop_finish(fs_info); in relocating_repair_kthread()
8301 int btrfs_repair_one_zone(struct btrfs_fs_info *fs_info, u64 logical) in btrfs_repair_one_zone() argument
8306 if (btrfs_test_opt(fs_info, DEGRADED)) in btrfs_repair_one_zone()
8309 cache = btrfs_lookup_block_group(fs_info, logical); in btrfs_repair_one_zone()