Lines Matching refs:fs_info

259 static int btrfs_relocate_sys_chunks(struct btrfs_fs_info *fs_info);
1112 device->fs_info = NULL; in btrfs_close_one_device()
1152 fs_devices->fs_info = NULL; in close_fs_devices()
1457 lockdep_assert_held(&device->fs_info->chunk_mutex); in contains_pending_extent()
1619 struct btrfs_fs_info *fs_info = device->fs_info; in find_free_dev_extent() local
1620 struct btrfs_root *root = fs_info->dev_root; in find_free_dev_extent()
1763 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_free_dev_extent() local
1764 struct btrfs_root *root = fs_info->dev_root; in btrfs_free_dev_extent()
1813 static u64 find_next_chunk(struct btrfs_fs_info *fs_info) in find_next_chunk() argument
1818 read_lock(&fs_info->mapping_tree_lock); in find_next_chunk()
1819 n = rb_last(&fs_info->mapping_tree.rb_root); in find_next_chunk()
1826 read_unlock(&fs_info->mapping_tree_lock); in find_next_chunk()
1831 static noinline int find_next_devid(struct btrfs_fs_info *fs_info, in find_next_devid() argument
1847 ret = btrfs_search_slot(NULL, fs_info->chunk_root, &key, path, 0, 0); in find_next_devid()
1853 btrfs_err(fs_info, "corrupted chunk tree devid -1 matched"); in find_next_devid()
1858 ret = btrfs_previous_item(fs_info->chunk_root, path, in find_next_devid()
1897 ret = btrfs_insert_empty_item(trans, trans->fs_info->chunk_root, path, in btrfs_add_dev_item()
1924 write_extent_buffer(leaf, trans->fs_info->fs_devices->metadata_uuid, in btrfs_add_dev_item()
1956 struct btrfs_root *root = device->fs_info->chunk_root; in btrfs_rm_dev_item()
1989 static int btrfs_check_raid_min_devices(struct btrfs_fs_info *fs_info, in btrfs_check_raid_min_devices() argument
1997 seq = read_seqbegin(&fs_info->profiles_lock); in btrfs_check_raid_min_devices()
1999 all_avail = fs_info->avail_data_alloc_bits | in btrfs_check_raid_min_devices()
2000 fs_info->avail_system_alloc_bits | in btrfs_check_raid_min_devices()
2001 fs_info->avail_metadata_alloc_bits; in btrfs_check_raid_min_devices()
2002 } while (read_seqretry(&fs_info->profiles_lock, seq)); in btrfs_check_raid_min_devices()
2039 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_assign_next_active_device() local
2042 next_device = btrfs_find_next_active_device(fs_info->fs_devices, in btrfs_assign_next_active_device()
2046 if (fs_info->sb->s_bdev && in btrfs_assign_next_active_device()
2047 (fs_info->sb->s_bdev == device->bdev)) in btrfs_assign_next_active_device()
2048 fs_info->sb->s_bdev = next_device->bdev; in btrfs_assign_next_active_device()
2050 if (fs_info->fs_devices->latest_dev->bdev == device->bdev) in btrfs_assign_next_active_device()
2051 fs_info->fs_devices->latest_dev = next_device; in btrfs_assign_next_active_device()
2058 static u64 btrfs_num_devices(struct btrfs_fs_info *fs_info) in btrfs_num_devices() argument
2060 u64 num_devices = fs_info->fs_devices->num_devices; in btrfs_num_devices()
2062 down_read(&fs_info->dev_replace.rwsem); in btrfs_num_devices()
2063 if (btrfs_dev_replace_is_ongoing(&fs_info->dev_replace)) { in btrfs_num_devices()
2067 up_read(&fs_info->dev_replace.rwsem); in btrfs_num_devices()
2072 static void btrfs_scratch_superblock(struct btrfs_fs_info *fs_info, in btrfs_scratch_superblock() argument
2090 btrfs_warn(fs_info, "error clearing superblock number %d (%d)", in btrfs_scratch_superblock()
2094 void btrfs_scratch_superblocks(struct btrfs_fs_info *fs_info, struct btrfs_device *device) in btrfs_scratch_superblocks() argument
2106 btrfs_scratch_superblock(fs_info, bdev, copy_num); in btrfs_scratch_superblocks()
2116 int btrfs_rm_device(struct btrfs_fs_info *fs_info, in btrfs_rm_device() argument
2123 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_rm_device()
2127 if (btrfs_fs_incompat(fs_info, EXTENT_TREE_V2)) { in btrfs_rm_device()
2128 btrfs_err(fs_info, "device remove not supported on extent tree v2 yet"); in btrfs_rm_device()
2137 num_devices = btrfs_num_devices(fs_info); in btrfs_rm_device()
2139 ret = btrfs_check_raid_min_devices(fs_info, num_devices - 1); in btrfs_rm_device()
2143 device = btrfs_find_device(fs_info->fs_devices, args); in btrfs_rm_device()
2152 if (btrfs_pinned_by_swapfile(fs_info, device)) { in btrfs_rm_device()
2153 btrfs_warn_in_rcu(fs_info, in btrfs_rm_device()
2163 fs_info->fs_devices->rw_devices == 1) in btrfs_rm_device()
2167 mutex_lock(&fs_info->chunk_mutex); in btrfs_rm_device()
2170 mutex_unlock(&fs_info->chunk_mutex); in btrfs_rm_device()
2177 trans = btrfs_start_transaction(fs_info->chunk_root, 0); in btrfs_rm_device()
2186 btrfs_crit(fs_info, in btrfs_rm_device()
2233 num_devices = btrfs_super_num_devices(fs_info->super_copy) - 1; in btrfs_rm_device()
2234 btrfs_set_super_num_devices(fs_info->super_copy, num_devices); in btrfs_rm_device()
2248 btrfs_scratch_superblocks(fs_info, device); in btrfs_rm_device()
2279 mutex_lock(&fs_info->chunk_mutex); in btrfs_rm_device()
2283 mutex_unlock(&fs_info->chunk_mutex); in btrfs_rm_device()
2292 lockdep_assert_held(&srcdev->fs_info->fs_devices->device_list_mutex); in btrfs_rm_dev_replace_remove_srcdev()
2344 struct btrfs_fs_devices *fs_devices = tgtdev->fs_info->fs_devices; in btrfs_destroy_dev_replace_tgtdev()
2361 btrfs_scratch_superblocks(tgtdev->fs_info, tgtdev); in btrfs_destroy_dev_replace_tgtdev()
2386 int btrfs_get_dev_args_from_path(struct btrfs_fs_info *fs_info, in btrfs_get_dev_args_from_path() argument
2417 if (btrfs_fs_incompat(fs_info, METADATA_UUID)) in btrfs_get_dev_args_from_path()
2440 struct btrfs_fs_info *fs_info, u64 devid, in btrfs_find_device_by_devspec() argument
2449 device = btrfs_find_device(fs_info->fs_devices, &args); in btrfs_find_device_by_devspec()
2455 ret = btrfs_get_dev_args_from_path(fs_info, &args, device_path); in btrfs_find_device_by_devspec()
2458 device = btrfs_find_device(fs_info->fs_devices, &args); in btrfs_find_device_by_devspec()
2465 static struct btrfs_fs_devices *btrfs_init_sprout(struct btrfs_fs_info *fs_info) in btrfs_init_sprout() argument
2467 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_sprout()
2510 static void btrfs_setup_sprout(struct btrfs_fs_info *fs_info, in btrfs_setup_sprout() argument
2513 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_setup_sprout()
2514 struct btrfs_super_block *disk_super = fs_info->super_copy; in btrfs_setup_sprout()
2565 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_finish_sprout() local
2566 struct btrfs_root *root = fs_info->chunk_root; in btrfs_finish_sprout()
2619 device = btrfs_find_device(fs_info->fs_devices, &args); in btrfs_finish_sprout()
2637 int btrfs_init_new_device(struct btrfs_fs_info *fs_info, const char *device_path) in btrfs_init_new_device() argument
2639 struct btrfs_root *root = fs_info->dev_root; in btrfs_init_new_device()
2643 struct super_block *sb = fs_info->sb; in btrfs_init_new_device()
2644 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_new_device()
2656 fs_info->bdev_holder, NULL); in btrfs_init_new_device()
2660 if (!btrfs_check_device_zone_type(fs_info, file_bdev(bdev_file))) { in btrfs_init_new_device()
2684 device = btrfs_alloc_device(fs_info, NULL, NULL, device_path); in btrfs_init_new_device()
2691 device->fs_info = fs_info; in btrfs_init_new_device()
2710 device->io_width = fs_info->sectorsize; in btrfs_init_new_device()
2711 device->io_align = fs_info->sectorsize; in btrfs_init_new_device()
2712 device->sector_size = fs_info->sectorsize; in btrfs_init_new_device()
2714 round_down(bdev_nr_bytes(device->bdev), fs_info->sectorsize); in btrfs_init_new_device()
2726 seed_devices = btrfs_init_sprout(fs_info); in btrfs_init_new_device()
2736 btrfs_setup_sprout(fs_info, seed_devices); in btrfs_init_new_device()
2737 btrfs_assign_next_active_device(fs_info->fs_devices->latest_dev, in btrfs_init_new_device()
2743 mutex_lock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2752 atomic64_add(device->total_bytes, &fs_info->free_chunk_space); in btrfs_init_new_device()
2757 orig_super_total_bytes = btrfs_super_total_bytes(fs_info->super_copy); in btrfs_init_new_device()
2758 btrfs_set_super_total_bytes(fs_info->super_copy, in btrfs_init_new_device()
2760 fs_info->sectorsize)); in btrfs_init_new_device()
2762 orig_super_num_devices = btrfs_super_num_devices(fs_info->super_copy); in btrfs_init_new_device()
2763 btrfs_set_super_num_devices(fs_info->super_copy, in btrfs_init_new_device()
2770 btrfs_clear_space_info_full(fs_info); in btrfs_init_new_device()
2772 mutex_unlock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2780 mutex_lock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2782 mutex_unlock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2819 ret = btrfs_relocate_sys_chunks(fs_info); in btrfs_init_new_device()
2821 btrfs_handle_fs_error(fs_info, ret, in btrfs_init_new_device()
2850 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2851 mutex_lock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2854 fs_info->fs_devices->num_devices--; in btrfs_init_new_device()
2855 fs_info->fs_devices->open_devices--; in btrfs_init_new_device()
2856 fs_info->fs_devices->rw_devices--; in btrfs_init_new_device()
2857 fs_info->fs_devices->total_devices--; in btrfs_init_new_device()
2858 fs_info->fs_devices->total_rw_bytes -= device->total_bytes; in btrfs_init_new_device()
2859 atomic64_sub(device->total_bytes, &fs_info->free_chunk_space); in btrfs_init_new_device()
2860 btrfs_set_super_total_bytes(fs_info->super_copy, in btrfs_init_new_device()
2862 btrfs_set_super_num_devices(fs_info->super_copy, in btrfs_init_new_device()
2864 mutex_unlock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2865 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2889 struct btrfs_root *root = device->fs_info->chunk_root; in btrfs_update_device()
2933 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_grow_device() local
2934 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_grow_device()
2942 new_size = round_down(new_size, fs_info->sectorsize); in btrfs_grow_device()
2944 mutex_lock(&fs_info->chunk_mutex); in btrfs_grow_device()
2946 diff = round_down(new_size - device->total_bytes, fs_info->sectorsize); in btrfs_grow_device()
2950 mutex_unlock(&fs_info->chunk_mutex); in btrfs_grow_device()
2955 round_down(old_total + diff, fs_info->sectorsize)); in btrfs_grow_device()
2957 atomic64_add(diff, &fs_info->free_chunk_space); in btrfs_grow_device()
2961 btrfs_clear_space_info_full(device->fs_info); in btrfs_grow_device()
2965 mutex_unlock(&fs_info->chunk_mutex); in btrfs_grow_device()
2976 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_free_chunk() local
2977 struct btrfs_root *root = fs_info->chunk_root; in btrfs_free_chunk()
2994 btrfs_err(fs_info, "failed to lookup chunk %llu when freeing", in btrfs_free_chunk()
3003 btrfs_err(fs_info, "failed to delete chunk %llu item", chunk_offset); in btrfs_free_chunk()
3012 static int btrfs_del_sys_chunk(struct btrfs_fs_info *fs_info, u64 chunk_offset) in btrfs_del_sys_chunk() argument
3014 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_del_sys_chunk()
3025 lockdep_assert_held(&fs_info->chunk_mutex); in btrfs_del_sys_chunk()
3058 struct btrfs_chunk_map *btrfs_find_chunk_map_nolock(struct btrfs_fs_info *fs_info, in btrfs_find_chunk_map_nolock() argument
3061 struct rb_node *node = fs_info->mapping_tree.rb_root.rb_node; in btrfs_find_chunk_map_nolock()
3121 struct btrfs_chunk_map *btrfs_find_chunk_map(struct btrfs_fs_info *fs_info, in btrfs_find_chunk_map() argument
3126 read_lock(&fs_info->mapping_tree_lock); in btrfs_find_chunk_map()
3127 map = btrfs_find_chunk_map_nolock(fs_info, logical, length); in btrfs_find_chunk_map()
3128 read_unlock(&fs_info->mapping_tree_lock); in btrfs_find_chunk_map()
3141 struct btrfs_chunk_map *btrfs_get_chunk_map(struct btrfs_fs_info *fs_info, in btrfs_get_chunk_map() argument
3146 map = btrfs_find_chunk_map(fs_info, logical, length); in btrfs_get_chunk_map()
3149 btrfs_crit(fs_info, in btrfs_get_chunk_map()
3156 btrfs_crit(fs_info, in btrfs_get_chunk_map()
3178 lockdep_assert_held(&trans->fs_info->chunk_mutex); in remove_chunk_item()
3193 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_remove_chunk() local
3197 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_remove_chunk()
3199 map = btrfs_get_chunk_map(fs_info, chunk_offset, 1); in btrfs_remove_chunk()
3233 mutex_lock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
3236 atomic64_add(dev_extent_len, &fs_info->free_chunk_space); in btrfs_remove_chunk()
3237 btrfs_clear_space_info_full(fs_info); in btrfs_remove_chunk()
3238 mutex_unlock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
3265 mutex_lock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
3285 const u64 sys_flags = btrfs_system_alloc_profile(fs_info); in btrfs_remove_chunk()
3311 trace_btrfs_chunk_free(fs_info, map, chunk_offset, map->chunk_len); in btrfs_remove_chunk()
3314 ret = btrfs_del_sys_chunk(fs_info, chunk_offset); in btrfs_remove_chunk()
3321 mutex_unlock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
3338 mutex_unlock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
3346 int btrfs_relocate_chunk(struct btrfs_fs_info *fs_info, u64 chunk_offset) in btrfs_relocate_chunk() argument
3348 struct btrfs_root *root = fs_info->chunk_root; in btrfs_relocate_chunk()
3354 if (btrfs_fs_incompat(fs_info, EXTENT_TREE_V2)) { in btrfs_relocate_chunk()
3355 btrfs_err(fs_info, in btrfs_relocate_chunk()
3372 lockdep_assert_held(&fs_info->reclaim_bgs_lock); in btrfs_relocate_chunk()
3375 btrfs_scrub_pause(fs_info); in btrfs_relocate_chunk()
3376 ret = btrfs_relocate_block_group(fs_info, chunk_offset); in btrfs_relocate_chunk()
3377 btrfs_scrub_continue(fs_info); in btrfs_relocate_chunk()
3383 if (BTRFS_FS_ERROR(fs_info)) in btrfs_relocate_chunk()
3384 btrfs_scrub_cancel(fs_info); in btrfs_relocate_chunk()
3388 block_group = btrfs_lookup_block_group(fs_info, chunk_offset); in btrfs_relocate_chunk()
3391 btrfs_discard_cancel_work(&fs_info->discard_ctl, block_group); in btrfs_relocate_chunk()
3401 if (btrfs_is_zoned(fs_info)) { in btrfs_relocate_chunk()
3402 ret = btrfs_discard_extent(fs_info, chunk_offset, length, NULL); in btrfs_relocate_chunk()
3404 btrfs_info(fs_info, in btrfs_relocate_chunk()
3409 trans = btrfs_start_trans_remove_block_group(root->fs_info, in btrfs_relocate_chunk()
3413 btrfs_handle_fs_error(root->fs_info, ret, NULL); in btrfs_relocate_chunk()
3426 static int btrfs_relocate_sys_chunks(struct btrfs_fs_info *fs_info) in btrfs_relocate_sys_chunks() argument
3428 struct btrfs_root *chunk_root = fs_info->chunk_root; in btrfs_relocate_sys_chunks()
3449 mutex_lock(&fs_info->reclaim_bgs_lock); in btrfs_relocate_sys_chunks()
3452 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_relocate_sys_chunks()
3464 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_relocate_sys_chunks()
3471 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_relocate_sys_chunks()
3486 ret = btrfs_relocate_chunk(fs_info, found_key.offset); in btrfs_relocate_sys_chunks()
3492 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_relocate_sys_chunks()
3516 static int btrfs_may_alloc_data_chunk(struct btrfs_fs_info *fs_info, in btrfs_may_alloc_data_chunk() argument
3523 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in btrfs_may_alloc_data_chunk()
3531 spin_lock(&fs_info->data_sinfo->lock); in btrfs_may_alloc_data_chunk()
3532 bytes_used = fs_info->data_sinfo->bytes_used; in btrfs_may_alloc_data_chunk()
3533 spin_unlock(&fs_info->data_sinfo->lock); in btrfs_may_alloc_data_chunk()
3539 trans = btrfs_join_transaction(fs_info->tree_root); in btrfs_may_alloc_data_chunk()
3591 static int insert_balance_item(struct btrfs_fs_info *fs_info, in insert_balance_item() argument
3594 struct btrfs_root *root = fs_info->tree_root; in insert_balance_item()
3645 static int del_balance_item(struct btrfs_fs_info *fs_info) in del_balance_item() argument
3647 struct btrfs_root *root = fs_info->tree_root; in del_balance_item()
3730 static void reset_balance_state(struct btrfs_fs_info *fs_info) in reset_balance_state() argument
3732 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in reset_balance_state()
3735 ASSERT(fs_info->balance_ctl); in reset_balance_state()
3737 spin_lock(&fs_info->balance_lock); in reset_balance_state()
3738 fs_info->balance_ctl = NULL; in reset_balance_state()
3739 spin_unlock(&fs_info->balance_lock); in reset_balance_state()
3742 ret = del_balance_item(fs_info); in reset_balance_state()
3744 btrfs_handle_fs_error(fs_info, ret, NULL); in reset_balance_state()
3763 static int chunk_usage_range_filter(struct btrfs_fs_info *fs_info, u64 chunk_offset, in chunk_usage_range_filter() argument
3772 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in chunk_usage_range_filter()
3794 static int chunk_usage_filter(struct btrfs_fs_info *fs_info, in chunk_usage_filter() argument
3801 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in chunk_usage_filter()
3925 struct btrfs_fs_info *fs_info = leaf->fs_info; in should_balance_chunk() local
3926 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in should_balance_chunk()
3951 chunk_usage_filter(fs_info, chunk_offset, bargs)) { in should_balance_chunk()
3954 chunk_usage_range_filter(fs_info, chunk_offset, bargs)) { in should_balance_chunk()
4011 static int __btrfs_balance(struct btrfs_fs_info *fs_info) in __btrfs_balance() argument
4013 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in __btrfs_balance()
4014 struct btrfs_root *chunk_root = fs_info->chunk_root; in __btrfs_balance()
4041 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
4043 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
4059 if ((!counting && atomic_read(&fs_info->balance_pause_req)) || in __btrfs_balance()
4060 atomic_read(&fs_info->balance_cancel_req)) { in __btrfs_balance()
4065 mutex_lock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
4068 mutex_unlock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
4082 mutex_unlock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
4092 mutex_unlock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
4100 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
4102 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
4109 mutex_unlock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
4114 mutex_unlock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
4115 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
4117 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
4139 mutex_unlock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
4150 ret = btrfs_may_alloc_data_chunk(fs_info, in __btrfs_balance()
4153 mutex_unlock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
4160 ret = btrfs_relocate_chunk(fs_info, found_key.offset); in __btrfs_balance()
4161 mutex_unlock(&fs_info->reclaim_bgs_lock); in __btrfs_balance()
4165 btrfs_info(fs_info, in __btrfs_balance()
4172 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
4174 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
4190 btrfs_info(fs_info, "%d enospc errors during balance", in __btrfs_balance()
4227 static inline int validate_convert_profile(struct btrfs_fs_info *fs_info, in validate_convert_profile() argument
4239 btrfs_err(fs_info, "balance: invalid convert %s profile %s", in validate_convert_profile()
4342 static void describe_balance_start_or_resume(struct btrfs_fs_info *fs_info) in describe_balance_start_or_resume() argument
4350 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in describe_balance_start_or_resume()
4391 btrfs_info(fs_info, "balance: %s %s", in describe_balance_start_or_resume()
4401 int btrfs_balance(struct btrfs_fs_info *fs_info, in btrfs_balance() argument
4415 if (btrfs_fs_closing(fs_info) || in btrfs_balance()
4416 atomic_read(&fs_info->balance_pause_req) || in btrfs_balance()
4417 btrfs_should_cancel_balance(fs_info)) { in btrfs_balance()
4422 allowed = btrfs_super_incompat_flags(fs_info->super_copy); in btrfs_balance()
4435 btrfs_err(fs_info, in btrfs_balance()
4446 num_devices = fs_info->fs_devices->rw_devices; in btrfs_balance()
4458 if (!validate_convert_profile(fs_info, &bctl->data, allowed, "data") || in btrfs_balance()
4459 !validate_convert_profile(fs_info, &bctl->meta, allowed, "metadata") || in btrfs_balance()
4460 !validate_convert_profile(fs_info, &bctl->sys, allowed, "system")) { in btrfs_balance()
4476 seq = read_seqbegin(&fs_info->profiles_lock); in btrfs_balance()
4479 (fs_info->avail_system_alloc_bits & allowed) && in btrfs_balance()
4482 (fs_info->avail_metadata_alloc_bits & allowed) && in btrfs_balance()
4490 bctl->meta.target : fs_info->avail_metadata_alloc_bits; in btrfs_balance()
4492 bctl->data.target : fs_info->avail_data_alloc_bits; in btrfs_balance()
4493 } while (read_seqretry(&fs_info->profiles_lock, seq)); in btrfs_balance()
4497 btrfs_info(fs_info, in btrfs_balance()
4500 btrfs_err(fs_info, in btrfs_balance()
4509 btrfs_warn(fs_info, in btrfs_balance()
4515 ret = insert_balance_item(fs_info, bctl); in btrfs_balance()
4521 BUG_ON(fs_info->balance_ctl); in btrfs_balance()
4522 spin_lock(&fs_info->balance_lock); in btrfs_balance()
4523 fs_info->balance_ctl = bctl; in btrfs_balance()
4524 spin_unlock(&fs_info->balance_lock); in btrfs_balance()
4527 spin_lock(&fs_info->balance_lock); in btrfs_balance()
4529 spin_unlock(&fs_info->balance_lock); in btrfs_balance()
4532 ASSERT(!test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_balance()
4533 set_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags); in btrfs_balance()
4534 describe_balance_start_or_resume(fs_info); in btrfs_balance()
4535 mutex_unlock(&fs_info->balance_mutex); in btrfs_balance()
4537 ret = __btrfs_balance(fs_info); in btrfs_balance()
4539 mutex_lock(&fs_info->balance_mutex); in btrfs_balance()
4540 if (ret == -ECANCELED && atomic_read(&fs_info->balance_pause_req)) { in btrfs_balance()
4541 btrfs_info(fs_info, "balance: paused"); in btrfs_balance()
4542 btrfs_exclop_balance(fs_info, BTRFS_EXCLOP_BALANCE_PAUSED); in btrfs_balance()
4561 btrfs_info(fs_info, "balance: canceled"); in btrfs_balance()
4563 btrfs_info(fs_info, "balance: ended with status: %d", ret); in btrfs_balance()
4565 clear_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags); in btrfs_balance()
4569 btrfs_update_ioctl_balance_args(fs_info, bargs); in btrfs_balance()
4574 reset_balance_state(fs_info); in btrfs_balance()
4575 btrfs_exclop_finish(fs_info); in btrfs_balance()
4578 wake_up(&fs_info->balance_wait_q); in btrfs_balance()
4583 reset_balance_state(fs_info); in btrfs_balance()
4586 btrfs_exclop_finish(fs_info); in btrfs_balance()
4593 struct btrfs_fs_info *fs_info = data; in balance_kthread() local
4596 sb_start_write(fs_info->sb); in balance_kthread()
4597 mutex_lock(&fs_info->balance_mutex); in balance_kthread()
4598 if (fs_info->balance_ctl) in balance_kthread()
4599 ret = btrfs_balance(fs_info, fs_info->balance_ctl, NULL); in balance_kthread()
4600 mutex_unlock(&fs_info->balance_mutex); in balance_kthread()
4601 sb_end_write(fs_info->sb); in balance_kthread()
4606 int btrfs_resume_balance_async(struct btrfs_fs_info *fs_info) in btrfs_resume_balance_async() argument
4610 mutex_lock(&fs_info->balance_mutex); in btrfs_resume_balance_async()
4611 if (!fs_info->balance_ctl) { in btrfs_resume_balance_async()
4612 mutex_unlock(&fs_info->balance_mutex); in btrfs_resume_balance_async()
4615 mutex_unlock(&fs_info->balance_mutex); in btrfs_resume_balance_async()
4617 if (btrfs_test_opt(fs_info, SKIP_BALANCE)) { in btrfs_resume_balance_async()
4618 btrfs_info(fs_info, "balance: resume skipped"); in btrfs_resume_balance_async()
4622 spin_lock(&fs_info->super_lock); in btrfs_resume_balance_async()
4623 ASSERT(fs_info->exclusive_operation == BTRFS_EXCLOP_BALANCE_PAUSED); in btrfs_resume_balance_async()
4624 fs_info->exclusive_operation = BTRFS_EXCLOP_BALANCE; in btrfs_resume_balance_async()
4625 spin_unlock(&fs_info->super_lock); in btrfs_resume_balance_async()
4631 spin_lock(&fs_info->balance_lock); in btrfs_resume_balance_async()
4632 fs_info->balance_ctl->flags |= BTRFS_BALANCE_RESUME; in btrfs_resume_balance_async()
4633 spin_unlock(&fs_info->balance_lock); in btrfs_resume_balance_async()
4635 tsk = kthread_run(balance_kthread, fs_info, "btrfs-balance"); in btrfs_resume_balance_async()
4639 int btrfs_recover_balance(struct btrfs_fs_info *fs_info) in btrfs_recover_balance() argument
4657 ret = btrfs_search_slot(NULL, fs_info->tree_root, &key, path, 0, 0); in btrfs_recover_balance()
4694 if (!btrfs_exclop_start(fs_info, BTRFS_EXCLOP_BALANCE_PAUSED)) in btrfs_recover_balance()
4695 btrfs_warn(fs_info, in btrfs_recover_balance()
4700 mutex_lock(&fs_info->balance_mutex); in btrfs_recover_balance()
4701 BUG_ON(fs_info->balance_ctl); in btrfs_recover_balance()
4702 spin_lock(&fs_info->balance_lock); in btrfs_recover_balance()
4703 fs_info->balance_ctl = bctl; in btrfs_recover_balance()
4704 spin_unlock(&fs_info->balance_lock); in btrfs_recover_balance()
4705 mutex_unlock(&fs_info->balance_mutex); in btrfs_recover_balance()
4711 int btrfs_pause_balance(struct btrfs_fs_info *fs_info) in btrfs_pause_balance() argument
4715 mutex_lock(&fs_info->balance_mutex); in btrfs_pause_balance()
4716 if (!fs_info->balance_ctl) { in btrfs_pause_balance()
4717 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
4721 if (test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)) { in btrfs_pause_balance()
4722 atomic_inc(&fs_info->balance_pause_req); in btrfs_pause_balance()
4723 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
4725 wait_event(fs_info->balance_wait_q, in btrfs_pause_balance()
4726 !test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_pause_balance()
4728 mutex_lock(&fs_info->balance_mutex); in btrfs_pause_balance()
4730 BUG_ON(test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_pause_balance()
4731 atomic_dec(&fs_info->balance_pause_req); in btrfs_pause_balance()
4736 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
4740 int btrfs_cancel_balance(struct btrfs_fs_info *fs_info) in btrfs_cancel_balance() argument
4742 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4743 if (!fs_info->balance_ctl) { in btrfs_cancel_balance()
4744 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4753 if (sb_rdonly(fs_info->sb)) { in btrfs_cancel_balance()
4754 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4758 atomic_inc(&fs_info->balance_cancel_req); in btrfs_cancel_balance()
4763 if (test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)) { in btrfs_cancel_balance()
4764 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4765 wait_event(fs_info->balance_wait_q, in btrfs_cancel_balance()
4766 !test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_cancel_balance()
4767 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4769 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4774 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4776 if (fs_info->balance_ctl) { in btrfs_cancel_balance()
4777 reset_balance_state(fs_info); in btrfs_cancel_balance()
4778 btrfs_exclop_finish(fs_info); in btrfs_cancel_balance()
4779 btrfs_info(fs_info, "balance: canceled"); in btrfs_cancel_balance()
4783 ASSERT(!test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_cancel_balance()
4784 atomic_dec(&fs_info->balance_cancel_req); in btrfs_cancel_balance()
4785 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4796 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_shrink_device() local
4797 struct btrfs_root *root = fs_info->dev_root; in btrfs_shrink_device()
4809 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_shrink_device()
4816 new_size = round_down(new_size, fs_info->sectorsize); in btrfs_shrink_device()
4818 diff = round_down(old_size - new_size, fs_info->sectorsize); in btrfs_shrink_device()
4835 mutex_lock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4852 atomic64_sub(free_diff, &fs_info->free_chunk_space); in btrfs_shrink_device()
4861 mutex_unlock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4866 mutex_unlock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4876 mutex_lock(&fs_info->reclaim_bgs_lock); in btrfs_shrink_device()
4879 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_shrink_device()
4885 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_shrink_device()
4898 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_shrink_device()
4907 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_shrink_device()
4921 ret = btrfs_may_alloc_data_chunk(fs_info, chunk_offset); in btrfs_shrink_device()
4923 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_shrink_device()
4927 ret = btrfs_relocate_chunk(fs_info, chunk_offset); in btrfs_shrink_device()
4928 mutex_unlock(&fs_info->reclaim_bgs_lock); in btrfs_shrink_device()
4933 btrfs_warn(fs_info, in btrfs_shrink_device()
4957 mutex_lock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4969 round_down(old_total - diff, fs_info->sectorsize)); in btrfs_shrink_device()
4970 mutex_unlock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4985 mutex_lock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4989 atomic64_add(free_diff, &fs_info->free_chunk_space); in btrfs_shrink_device()
4991 mutex_unlock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4996 static int btrfs_add_system_chunk(struct btrfs_fs_info *fs_info, in btrfs_add_system_chunk() argument
5000 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_add_system_chunk()
5005 lockdep_assert_held(&fs_info->chunk_mutex); in btrfs_add_system_chunk()
5095 space_info = btrfs_find_space_info(fs_devices->fs_info, ctl->type); in init_alloc_chunk_ctl_policy_regular()
5114 u64 zone_size = fs_devices->fs_info->zone_size; in init_alloc_chunk_ctl_policy_zoned()
5152 ctl->devs_max = BTRFS_MAX_DEVS(fs_devices->fs_info); in init_alloc_chunk_ctl()
5175 struct btrfs_fs_info *info = fs_devices->fs_info; in gather_device_info()
5331 struct btrfs_fs_info *info = fs_devices->fs_info; in decide_stripe_size()
5386 void btrfs_remove_chunk_map(struct btrfs_fs_info *fs_info, struct btrfs_chunk_map *map) in btrfs_remove_chunk_map() argument
5388 write_lock(&fs_info->mapping_tree_lock); in btrfs_remove_chunk_map()
5389 rb_erase_cached(&map->rb_node, &fs_info->mapping_tree); in btrfs_remove_chunk_map()
5392 write_unlock(&fs_info->mapping_tree_lock); in btrfs_remove_chunk_map()
5399 int btrfs_add_chunk_map(struct btrfs_fs_info *fs_info, struct btrfs_chunk_map *map) in btrfs_add_chunk_map() argument
5405 write_lock(&fs_info->mapping_tree_lock); in btrfs_add_chunk_map()
5406 p = &fs_info->mapping_tree.rb_root.rb_node; in btrfs_add_chunk_map()
5419 write_unlock(&fs_info->mapping_tree_lock); in btrfs_add_chunk_map()
5424 rb_insert_color_cached(&map->rb_node, &fs_info->mapping_tree, leftmost); in btrfs_add_chunk_map()
5427 write_unlock(&fs_info->mapping_tree_lock); in btrfs_add_chunk_map()
5451 struct btrfs_fs_info *info = trans->fs_info; in create_chunk()
5516 struct btrfs_fs_info *info = trans->fs_info; in btrfs_create_chunk()
5581 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_chunk_alloc_add_chunk_item() local
5582 struct btrfs_root *chunk_root = fs_info->chunk_root; in btrfs_chunk_alloc_add_chunk_item()
5613 lockdep_assert_held(&fs_info->chunk_mutex); in btrfs_chunk_alloc_add_chunk_item()
5615 map = btrfs_get_chunk_map(fs_info, bg->start, bg->length); in btrfs_chunk_alloc_add_chunk_item()
5657 btrfs_set_stack_chunk_sector_size(chunk, fs_info->sectorsize); in btrfs_chunk_alloc_add_chunk_item()
5671 ret = btrfs_add_system_chunk(fs_info, &key, chunk, item_size); in btrfs_chunk_alloc_add_chunk_item()
5684 struct btrfs_fs_info *fs_info = trans->fs_info; in init_first_rw_device() local
5710 alloc_profile = btrfs_metadata_alloc_profile(fs_info); in init_first_rw_device()
5715 alloc_profile = btrfs_system_alloc_profile(fs_info); in init_first_rw_device()
5730 bool btrfs_chunk_writeable(struct btrfs_fs_info *fs_info, u64 chunk_offset) in btrfs_chunk_writeable() argument
5737 map = btrfs_get_chunk_map(fs_info, chunk_offset, 1); in btrfs_chunk_writeable()
5765 void btrfs_mapping_tree_free(struct btrfs_fs_info *fs_info) in btrfs_mapping_tree_free() argument
5767 write_lock(&fs_info->mapping_tree_lock); in btrfs_mapping_tree_free()
5768 while (!RB_EMPTY_ROOT(&fs_info->mapping_tree.rb_root)) { in btrfs_mapping_tree_free()
5772 node = rb_first_cached(&fs_info->mapping_tree); in btrfs_mapping_tree_free()
5774 rb_erase_cached(&map->rb_node, &fs_info->mapping_tree); in btrfs_mapping_tree_free()
5779 cond_resched_rwlock_write(&fs_info->mapping_tree_lock); in btrfs_mapping_tree_free()
5781 write_unlock(&fs_info->mapping_tree_lock); in btrfs_mapping_tree_free()
5805 int btrfs_num_copies(struct btrfs_fs_info *fs_info, u64 logical, u64 len) in btrfs_num_copies() argument
5810 map = btrfs_get_chunk_map(fs_info, logical, len); in btrfs_num_copies()
5825 unsigned long btrfs_full_stripe_len(struct btrfs_fs_info *fs_info, in btrfs_full_stripe_len() argument
5829 unsigned long len = fs_info->sectorsize; in btrfs_full_stripe_len()
5831 if (!btrfs_fs_incompat(fs_info, RAID56)) in btrfs_full_stripe_len()
5834 map = btrfs_get_chunk_map(fs_info, logical, len); in btrfs_full_stripe_len()
5844 int btrfs_is_parity_mirror(struct btrfs_fs_info *fs_info, u64 logical, u64 len) in btrfs_is_parity_mirror() argument
5849 if (!btrfs_fs_incompat(fs_info, RAID56)) in btrfs_is_parity_mirror()
5852 map = btrfs_get_chunk_map(fs_info, logical, len); in btrfs_is_parity_mirror()
5862 static int find_live_mirror(struct btrfs_fs_info *fs_info, in find_live_mirror() argument
5866 const enum btrfs_read_policy policy = READ_ONCE(fs_info->fs_devices->read_policy); in find_live_mirror()
5884 btrfs_warn_rl(fs_info, "unknown read_policy type %u, reset to pid", in find_live_mirror()
5886 WRITE_ONCE(fs_info->fs_devices->read_policy, BTRFS_READ_POLICY_PID); in find_live_mirror()
5894 fs_info->dev_replace.cont_reading_from_srcdev_mode == in find_live_mirror()
5896 srcdev = fs_info->dev_replace.srcdev; in find_live_mirror()
5922 static struct btrfs_io_context *alloc_btrfs_io_context(struct btrfs_fs_info *fs_info, in alloc_btrfs_io_context() argument
5940 bioc->fs_info = fs_info; in alloc_btrfs_io_context()
5966 struct btrfs_discard_stripe *btrfs_map_discard(struct btrfs_fs_info *fs_info, in btrfs_map_discard() argument
5988 map = btrfs_get_chunk_map(fs_info, logical, length); in btrfs_map_discard()
6103 static bool is_block_group_to_copy(struct btrfs_fs_info *fs_info, u64 logical) in is_block_group_to_copy() argument
6109 if (!btrfs_is_zoned(fs_info)) in is_block_group_to_copy()
6112 cache = btrfs_lookup_block_group(fs_info, logical); in is_block_group_to_copy()
6139 if (is_block_group_to_copy(dev_replace->srcdev->fs_info, logical)) in handle_ops_on_dev_replace()
6242 static int set_io_stripe(struct btrfs_fs_info *fs_info, u64 logical, in set_io_stripe() argument
6250 btrfs_need_stripe_tree_update(fs_info, map->type)) in set_io_stripe()
6251 return btrfs_get_raid_extent_offset(fs_info, logical, length, in set_io_stripe()
6261 static bool is_single_device_io(struct btrfs_fs_info *fs_info, in is_single_device_io() argument
6273 if (btrfs_need_stripe_tree_update(fs_info, map->type) && op != BTRFS_MAP_READ) in is_single_device_io()
6291 static void map_blocks_raid1(struct btrfs_fs_info *fs_info, in map_blocks_raid1() argument
6306 io_geom->stripe_index = find_live_mirror(fs_info, map, 0, in map_blocks_raid1()
6327 static void map_blocks_raid10(struct btrfs_fs_info *fs_info, in map_blocks_raid10() argument
6349 io_geom->stripe_index = find_live_mirror(fs_info, map, in map_blocks_raid10()
6447 int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, in btrfs_map_block() argument
6458 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in btrfs_map_block()
6470 map = btrfs_get_chunk_map(fs_info, logical, *length); in btrfs_map_block()
6499 map_blocks_raid1(fs_info, map, &io_geom, dev_replace_is_ongoing); in btrfs_map_block()
6505 map_blocks_raid10(fs_info, map, &io_geom, dev_replace_is_ongoing); in btrfs_map_block()
6524 btrfs_crit(fs_info, in btrfs_map_block()
6548 if (is_single_device_io(fs_info, smap, map, num_alloc_stripes, op, in btrfs_map_block()
6550 ret = set_io_stripe(fs_info, logical, length, smap, map, &io_geom); in btrfs_map_block()
6557 bioc = alloc_btrfs_io_context(fs_info, logical, num_alloc_stripes); in btrfs_map_block()
6601 ret = set_io_stripe(fs_info, logical, length, in btrfs_map_block()
6741 struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info, in btrfs_alloc_device() argument
6748 if (WARN_ON(!devid && !fs_info)) in btrfs_alloc_device()
6761 extent_io_tree_init(fs_info, &dev->alloc_state, IO_TREE_DEVICE_ALLOC_STATE); in btrfs_alloc_device()
6768 ret = find_next_devid(fs_info, &tmp); in btrfs_alloc_device()
6795 static void btrfs_report_missing_device(struct btrfs_fs_info *fs_info, in btrfs_report_missing_device() argument
6799 btrfs_err_rl(fs_info, "devid %llu uuid %pU is missing", in btrfs_report_missing_device()
6802 btrfs_warn_rl(fs_info, "devid %llu uuid %pU is missing", in btrfs_report_missing_device()
6821 static int check_32bit_meta_chunk(struct btrfs_fs_info *fs_info, in check_32bit_meta_chunk() argument
6830 btrfs_err_32bit_limit(fs_info); in check_32bit_meta_chunk()
6840 static void warn_32bit_meta_chunk(struct btrfs_fs_info *fs_info, in warn_32bit_meta_chunk() argument
6849 btrfs_warn_32bit_limit(fs_info); in warn_32bit_meta_chunk()
6853 static struct btrfs_device *handle_missing_device(struct btrfs_fs_info *fs_info, in handle_missing_device() argument
6858 if (!btrfs_test_opt(fs_info, DEGRADED)) { in handle_missing_device()
6859 btrfs_report_missing_device(fs_info, devid, uuid, true); in handle_missing_device()
6863 dev = add_missing_dev(fs_info->fs_devices, devid, uuid); in handle_missing_device()
6865 btrfs_err(fs_info, "failed to init missing device %llu: %ld", in handle_missing_device()
6869 btrfs_report_missing_device(fs_info, devid, uuid, false); in handle_missing_device()
6878 struct btrfs_fs_info *fs_info = leaf->fs_info; in read_one_chunk() local
6897 ret = check_32bit_meta_chunk(fs_info, logical, length, type); in read_one_chunk()
6900 warn_32bit_meta_chunk(fs_info, logical, length, type); in read_one_chunk()
6913 map = btrfs_find_chunk_map(fs_info, logical, 1); in read_one_chunk()
6953 map->stripes[i].dev = btrfs_find_device(fs_info->fs_devices, &args); in read_one_chunk()
6955 map->stripes[i].dev = handle_missing_device(fs_info, in read_one_chunk()
6968 ret = btrfs_add_chunk_map(fs_info, map); in read_one_chunk()
6970 btrfs_err(fs_info, in read_one_chunk()
7001 static struct btrfs_fs_devices *open_seed_devices(struct btrfs_fs_info *fs_info, in open_seed_devices() argument
7011 list_for_each_entry(fs_devices, &fs_info->fs_devices->seed_list, seed_list) in open_seed_devices()
7018 if (!btrfs_test_opt(fs_info, DEGRADED)) in open_seed_devices()
7038 ret = open_fs_devices(fs_devices, BLK_OPEN_READ, fs_info->bdev_holder); in open_seed_devices()
7050 list_add(&fs_devices->seed_list, &fs_info->fs_devices->seed_list); in open_seed_devices()
7059 struct btrfs_fs_info *fs_info = leaf->fs_info; in read_one_dev() local
7060 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in read_one_dev()
7077 fs_devices = open_seed_devices(fs_info, fs_uuid); in read_one_dev()
7082 device = btrfs_find_device(fs_info->fs_devices, &args); in read_one_dev()
7084 if (!btrfs_test_opt(fs_info, DEGRADED)) { in read_one_dev()
7085 btrfs_report_missing_device(fs_info, devid, in read_one_dev()
7092 btrfs_err(fs_info, in read_one_dev()
7097 btrfs_report_missing_device(fs_info, devid, dev_uuid, false); in read_one_dev()
7100 if (!btrfs_test_opt(fs_info, DEGRADED)) { in read_one_dev()
7101 btrfs_report_missing_device(fs_info, in read_one_dev()
7105 btrfs_report_missing_device(fs_info, devid, in read_one_dev()
7137 if (device->fs_devices != fs_info->fs_devices) { in read_one_dev()
7149 btrfs_err(fs_info, in read_one_dev()
7160 &fs_info->free_chunk_space); in read_one_dev()
7166 int btrfs_read_sys_array(struct btrfs_fs_info *fs_info) in btrfs_read_sys_array() argument
7168 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_read_sys_array()
7182 ASSERT(BTRFS_SUPER_INFO_SIZE <= fs_info->nodesize); in btrfs_read_sys_array()
7189 sb = alloc_dummy_extent_buffer(fs_info, BTRFS_SUPER_INFO_OFFSET); in btrfs_read_sys_array()
7214 btrfs_err(fs_info, in btrfs_read_sys_array()
7232 btrfs_err(fs_info, in btrfs_read_sys_array()
7241 btrfs_err(fs_info, in btrfs_read_sys_array()
7265 btrfs_err(fs_info, "sys_array too short to read %u bytes at offset %u", in btrfs_read_sys_array()
7280 bool btrfs_check_rw_degradable(struct btrfs_fs_info *fs_info, in btrfs_check_rw_degradable() argument
7287 map = btrfs_find_chunk_map(fs_info, 0, U64_MAX); in btrfs_check_rw_degradable()
7313 btrfs_warn(fs_info, in btrfs_check_rw_degradable()
7323 map = btrfs_find_chunk_map(fs_info, next_start, U64_MAX - next_start); in btrfs_check_rw_degradable()
7338 int btrfs_read_chunk_tree(struct btrfs_fs_info *fs_info) in btrfs_read_chunk_tree() argument
7340 struct btrfs_root *root = fs_info->chunk_root; in btrfs_read_chunk_tree()
7367 fs_info->fs_devices->total_rw_bytes = 0; in btrfs_read_chunk_tree()
7379 ASSERT(!test_bit(BTRFS_FS_OPEN, &fs_info->flags)); in btrfs_read_chunk_tree()
7438 if (total_dev != fs_info->fs_devices->total_devices) { in btrfs_read_chunk_tree()
7439 btrfs_warn(fs_info, in btrfs_read_chunk_tree()
7441 btrfs_super_num_devices(fs_info->super_copy), in btrfs_read_chunk_tree()
7443 fs_info->fs_devices->total_devices = total_dev; in btrfs_read_chunk_tree()
7444 btrfs_set_super_num_devices(fs_info->super_copy, total_dev); in btrfs_read_chunk_tree()
7446 if (btrfs_super_total_bytes(fs_info->super_copy) < in btrfs_read_chunk_tree()
7447 fs_info->fs_devices->total_rw_bytes) { in btrfs_read_chunk_tree()
7448 btrfs_err(fs_info, in btrfs_read_chunk_tree()
7450 btrfs_super_total_bytes(fs_info->super_copy), in btrfs_read_chunk_tree()
7451 fs_info->fs_devices->total_rw_bytes); in btrfs_read_chunk_tree()
7463 int btrfs_init_devices_late(struct btrfs_fs_info *fs_info) in btrfs_init_devices_late() argument
7465 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices, *seed_devs; in btrfs_init_devices_late()
7469 fs_devices->fs_info = fs_info; in btrfs_init_devices_late()
7473 device->fs_info = fs_info; in btrfs_init_devices_late()
7477 device->fs_info = fs_info; in btrfs_init_devices_late()
7483 seed_devs->fs_info = fs_info; in btrfs_init_devices_late()
7522 if (!device->fs_info->dev_root) in btrfs_device_init_dev_stats()
7528 ret = btrfs_search_slot(NULL, device->fs_info->dev_root, &key, path, 0, 0); in btrfs_device_init_dev_stats()
7557 int btrfs_init_dev_stats(struct btrfs_fs_info *fs_info) in btrfs_init_dev_stats() argument
7559 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices, *seed_devs; in btrfs_init_dev_stats()
7591 struct btrfs_fs_info *fs_info = trans->fs_info; in update_dev_stat_item() local
7592 struct btrfs_root *dev_root = fs_info->dev_root; in update_dev_stat_item()
7609 btrfs_warn_in_rcu(fs_info, in update_dev_stat_item()
7620 btrfs_warn_in_rcu(fs_info, in update_dev_stat_item()
7634 btrfs_warn_in_rcu(fs_info, in update_dev_stat_item()
7658 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_run_dev_stats() local
7659 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_run_dev_stats()
7699 btrfs_err_rl_in_rcu(dev->fs_info, in btrfs_dev_stat_inc_and_print()
7719 btrfs_info_in_rcu(dev->fs_info, in btrfs_dev_stat_print_on_load()
7729 int btrfs_get_dev_stats(struct btrfs_fs_info *fs_info, in btrfs_get_dev_stats() argument
7734 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_get_dev_stats()
7739 dev = btrfs_find_device(fs_info->fs_devices, &args); in btrfs_get_dev_stats()
7743 btrfs_warn(fs_info, "get dev_stats failed, device not found"); in btrfs_get_dev_stats()
7746 btrfs_warn(fs_info, "get dev_stats failed, not yet valid"); in btrfs_get_dev_stats()
7756 btrfs_info(fs_info, "device stats zeroed by %s (%d)", in btrfs_get_dev_stats()
7789 mutex_lock(&trans->fs_info->chunk_mutex); in btrfs_commit_device_sizes()
7796 mutex_unlock(&trans->fs_info->chunk_mutex); in btrfs_commit_device_sizes()
7811 static int verify_one_dev_extent(struct btrfs_fs_info *fs_info, in verify_one_dev_extent() argument
7823 map = btrfs_find_chunk_map(fs_info, chunk_offset, 1); in verify_one_dev_extent()
7825 btrfs_err(fs_info, in verify_one_dev_extent()
7834 btrfs_err(fs_info, in verify_one_dev_extent()
7848 btrfs_warn(fs_info, in verify_one_dev_extent()
7857 btrfs_err(fs_info, in verify_one_dev_extent()
7868 btrfs_err(fs_info, in verify_one_dev_extent()
7875 dev = btrfs_find_device(fs_info->fs_devices, &args); in verify_one_dev_extent()
7877 btrfs_err(fs_info, "failed to find devid %llu", devid); in verify_one_dev_extent()
7883 btrfs_err(fs_info, in verify_one_dev_extent()
7896 btrfs_err(fs_info, in verify_one_dev_extent()
7909 static int verify_chunk_dev_extent_mapping(struct btrfs_fs_info *fs_info) in verify_chunk_dev_extent_mapping() argument
7914 read_lock(&fs_info->mapping_tree_lock); in verify_chunk_dev_extent_mapping()
7915 for (node = rb_first_cached(&fs_info->mapping_tree); node; node = rb_next(node)) { in verify_chunk_dev_extent_mapping()
7920 btrfs_err(fs_info, in verify_chunk_dev_extent_mapping()
7928 read_unlock(&fs_info->mapping_tree_lock); in verify_chunk_dev_extent_mapping()
7939 int btrfs_verify_dev_extents(struct btrfs_fs_info *fs_info) in btrfs_verify_dev_extents() argument
7942 struct btrfs_root *root = fs_info->dev_root; in btrfs_verify_dev_extents()
7958 if (btrfs_test_opt(fs_info, IGNOREBADROOTS)) in btrfs_verify_dev_extents()
8005 btrfs_err(fs_info, in btrfs_verify_dev_extents()
8012 ret = verify_one_dev_extent(fs_info, chunk_offset, devid, in btrfs_verify_dev_extents()
8029 ret = verify_chunk_dev_extent_mapping(fs_info); in btrfs_verify_dev_extents()
8039 bool btrfs_pinned_by_swapfile(struct btrfs_fs_info *fs_info, void *ptr) in btrfs_pinned_by_swapfile() argument
8044 spin_lock(&fs_info->swapfile_pins_lock); in btrfs_pinned_by_swapfile()
8045 node = fs_info->swapfile_pins.rb_node; in btrfs_pinned_by_swapfile()
8055 spin_unlock(&fs_info->swapfile_pins_lock); in btrfs_pinned_by_swapfile()
8062 struct btrfs_fs_info *fs_info = cache->fs_info; in relocating_repair_kthread() local
8069 sb_start_write(fs_info->sb); in relocating_repair_kthread()
8070 if (!btrfs_exclop_start(fs_info, BTRFS_EXCLOP_BALANCE)) { in relocating_repair_kthread()
8071 btrfs_info(fs_info, in relocating_repair_kthread()
8074 sb_end_write(fs_info->sb); in relocating_repair_kthread()
8078 mutex_lock(&fs_info->reclaim_bgs_lock); in relocating_repair_kthread()
8081 cache = btrfs_lookup_block_group(fs_info, target); in relocating_repair_kthread()
8088 ret = btrfs_may_alloc_data_chunk(fs_info, target); in relocating_repair_kthread()
8092 btrfs_info(fs_info, in relocating_repair_kthread()
8095 ret = btrfs_relocate_chunk(fs_info, target); in relocating_repair_kthread()
8100 mutex_unlock(&fs_info->reclaim_bgs_lock); in relocating_repair_kthread()
8101 btrfs_exclop_finish(fs_info); in relocating_repair_kthread()
8102 sb_end_write(fs_info->sb); in relocating_repair_kthread()
8107 bool btrfs_repair_one_zone(struct btrfs_fs_info *fs_info, u64 logical) in btrfs_repair_one_zone() argument
8111 if (!btrfs_is_zoned(fs_info)) in btrfs_repair_one_zone()
8115 if (btrfs_test_opt(fs_info, DEGRADED)) in btrfs_repair_one_zone()
8118 cache = btrfs_lookup_block_group(fs_info, logical); in btrfs_repair_one_zone()
8168 int btrfs_map_repair_block(struct btrfs_fs_info *fs_info, in btrfs_map_repair_block() argument
8179 ret = btrfs_map_block(fs_info, BTRFS_MAP_WRITE, logical, &map_length, in btrfs_map_repair_block()