Lines Matching refs:fs_info

127 				struct btrfs_fs_info *fs_info);
128 static int btrfs_relocate_sys_chunks(struct btrfs_fs_info *fs_info);
132 static int __btrfs_map_block(struct btrfs_fs_info *fs_info,
446 struct btrfs_fs_info *fs_info = device->fs_info; in run_scheduled_bios() local
565 fs_info->fs_devices->open_devices > 1) { in run_scheduled_bios()
598 btrfs_queue_work(fs_info->submit_workers, in run_scheduled_bios()
1264 struct btrfs_fs_info *fs_info = device->fs_info; in contains_pending_extent() local
1266 struct list_head *search_list = &fs_info->pinned_chunks; in contains_pending_extent()
1306 if (search_list != &fs_info->pinned_chunks) { in contains_pending_extent()
1307 search_list = &fs_info->pinned_chunks; in contains_pending_extent()
1340 struct btrfs_fs_info *fs_info = device->fs_info; in find_free_dev_extent_start() local
1341 struct btrfs_root *root = fs_info->dev_root; in find_free_dev_extent_start()
1510 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_free_dev_extent() local
1511 struct btrfs_root *root = fs_info->dev_root; in btrfs_free_dev_extent()
1547 btrfs_handle_fs_error(fs_info, ret, "Slot search failed"); in btrfs_free_dev_extent()
1555 btrfs_handle_fs_error(fs_info, ret, in btrfs_free_dev_extent()
1571 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_alloc_dev_extent() local
1572 struct btrfs_root *root = fs_info->dev_root; in btrfs_alloc_dev_extent()
1607 static u64 find_next_chunk(struct btrfs_fs_info *fs_info) in find_next_chunk() argument
1614 em_tree = &fs_info->mapping_tree.map_tree; in find_next_chunk()
1626 static noinline int find_next_devid(struct btrfs_fs_info *fs_info, in find_next_devid() argument
1642 ret = btrfs_search_slot(NULL, fs_info->chunk_root, &key, path, 0, 0); in find_next_devid()
1648 ret = btrfs_previous_item(fs_info->chunk_root, path, in find_next_devid()
1686 ret = btrfs_insert_empty_item(trans, trans->fs_info->chunk_root, path, in btrfs_add_dev_item()
1712 write_extent_buffer(leaf, trans->fs_info->fsid, ptr, BTRFS_FSID_SIZE); in btrfs_add_dev_item()
1736 static int btrfs_rm_dev_item(struct btrfs_fs_info *fs_info, in btrfs_rm_dev_item() argument
1739 struct btrfs_root *root = fs_info->chunk_root; in btrfs_rm_dev_item()
1785 static int btrfs_check_raid_min_devices(struct btrfs_fs_info *fs_info, in btrfs_check_raid_min_devices() argument
1793 seq = read_seqbegin(&fs_info->profiles_lock); in btrfs_check_raid_min_devices()
1795 all_avail = fs_info->avail_data_alloc_bits | in btrfs_check_raid_min_devices()
1796 fs_info->avail_system_alloc_bits | in btrfs_check_raid_min_devices()
1797 fs_info->avail_metadata_alloc_bits; in btrfs_check_raid_min_devices()
1798 } while (read_seqretry(&fs_info->profiles_lock, seq)); in btrfs_check_raid_min_devices()
1839 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_assign_next_active_device() local
1845 next_device = btrfs_find_next_active_device(fs_info->fs_devices, in btrfs_assign_next_active_device()
1849 if (fs_info->sb->s_bdev && in btrfs_assign_next_active_device()
1850 (fs_info->sb->s_bdev == device->bdev)) in btrfs_assign_next_active_device()
1851 fs_info->sb->s_bdev = next_device->bdev; in btrfs_assign_next_active_device()
1853 if (fs_info->fs_devices->latest_bdev == device->bdev) in btrfs_assign_next_active_device()
1854 fs_info->fs_devices->latest_bdev = next_device->bdev; in btrfs_assign_next_active_device()
1857 int btrfs_rm_device(struct btrfs_fs_info *fs_info, const char *device_path, in btrfs_rm_device() argument
1862 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_rm_device()
1869 btrfs_dev_replace_read_lock(&fs_info->dev_replace); in btrfs_rm_device()
1870 if (btrfs_dev_replace_is_ongoing(&fs_info->dev_replace)) { in btrfs_rm_device()
1874 btrfs_dev_replace_read_unlock(&fs_info->dev_replace); in btrfs_rm_device()
1876 ret = btrfs_check_raid_min_devices(fs_info, num_devices - 1); in btrfs_rm_device()
1880 ret = btrfs_find_device_by_devspec(fs_info, devid, device_path, in btrfs_rm_device()
1891 fs_info->fs_devices->rw_devices == 1) { in btrfs_rm_device()
1897 mutex_lock(&fs_info->chunk_mutex); in btrfs_rm_device()
1900 mutex_unlock(&fs_info->chunk_mutex); in btrfs_rm_device()
1914 ret = btrfs_rm_dev_item(fs_info, device); in btrfs_rm_device()
1919 btrfs_scrub_cancel_dev(fs_info, device); in btrfs_rm_device()
1957 num_devices = btrfs_super_num_devices(fs_info->super_copy) - 1; in btrfs_rm_device()
1958 btrfs_set_super_num_devices(fs_info->super_copy, num_devices); in btrfs_rm_device()
1991 mutex_lock(&fs_info->chunk_mutex); in btrfs_rm_device()
1995 mutex_unlock(&fs_info->chunk_mutex); in btrfs_rm_device()
2004 lockdep_assert_held(&srcdev->fs_info->fs_devices->device_list_mutex); in btrfs_rm_dev_replace_remove_srcdev()
2027 void btrfs_rm_dev_replace_free_srcdev(struct btrfs_fs_info *fs_info, in btrfs_rm_dev_replace_free_srcdev() argument
2052 tmp_fs_devices = fs_info->fs_devices; in btrfs_rm_dev_replace_free_srcdev()
2068 struct btrfs_fs_devices *fs_devices = tgtdev->fs_info->fs_devices; in btrfs_destroy_dev_replace_tgtdev()
2099 static int btrfs_find_device_by_path(struct btrfs_fs_info *fs_info, in btrfs_find_device_by_path() argument
2112 fs_info->bdev_holder, 0, &bdev, &bh); in btrfs_find_device_by_path()
2118 *device = btrfs_find_device(fs_info, devid, dev_uuid, disk_super->fsid); in btrfs_find_device_by_path()
2126 int btrfs_find_device_missing_or_by_path(struct btrfs_fs_info *fs_info, in btrfs_find_device_missing_or_by_path() argument
2135 devices = &fs_info->fs_devices->devices; in btrfs_find_device_missing_or_by_path()
2149 return btrfs_find_device_by_path(fs_info, device_path, device); in btrfs_find_device_missing_or_by_path()
2156 int btrfs_find_device_by_devspec(struct btrfs_fs_info *fs_info, u64 devid, in btrfs_find_device_by_devspec() argument
2164 *device = btrfs_find_device(fs_info, devid, NULL, NULL); in btrfs_find_device_by_devspec()
2171 ret = btrfs_find_device_missing_or_by_path(fs_info, devpath, in btrfs_find_device_by_devspec()
2180 static int btrfs_prepare_sprout(struct btrfs_fs_info *fs_info) in btrfs_prepare_sprout() argument
2182 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_prepare_sprout()
2185 struct btrfs_super_block *disk_super = fs_info->super_copy; in btrfs_prepare_sprout()
2217 mutex_lock(&fs_info->chunk_mutex); in btrfs_prepare_sprout()
2219 mutex_unlock(&fs_info->chunk_mutex); in btrfs_prepare_sprout()
2229 memcpy(fs_info->fsid, fs_devices->fsid, BTRFS_FSID_SIZE); in btrfs_prepare_sprout()
2244 struct btrfs_fs_info *fs_info) in btrfs_finish_sprout() argument
2246 struct btrfs_root *root = fs_info->chunk_root; in btrfs_finish_sprout()
2296 device = btrfs_find_device(fs_info, devid, dev_uuid, fs_uuid); in btrfs_finish_sprout()
2314 int btrfs_init_new_device(struct btrfs_fs_info *fs_info, const char *device_path) in btrfs_init_new_device() argument
2316 struct btrfs_root *root = fs_info->dev_root; in btrfs_init_new_device()
2321 struct super_block *sb = fs_info->sb; in btrfs_init_new_device()
2323 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_new_device()
2334 fs_info->bdev_holder); in btrfs_init_new_device()
2357 device = btrfs_alloc_device(fs_info, NULL, NULL); in btrfs_init_new_device()
2380 device->io_width = fs_info->sectorsize; in btrfs_init_new_device()
2381 device->io_align = fs_info->sectorsize; in btrfs_init_new_device()
2382 device->sector_size = fs_info->sectorsize; in btrfs_init_new_device()
2384 fs_info->sectorsize); in btrfs_init_new_device()
2387 device->fs_info = fs_info; in btrfs_init_new_device()
2397 ret = btrfs_prepare_sprout(fs_info); in btrfs_init_new_device()
2407 mutex_lock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2416 atomic64_add(device->total_bytes, &fs_info->free_chunk_space); in btrfs_init_new_device()
2421 orig_super_total_bytes = btrfs_super_total_bytes(fs_info->super_copy); in btrfs_init_new_device()
2422 btrfs_set_super_total_bytes(fs_info->super_copy, in btrfs_init_new_device()
2424 fs_info->sectorsize)); in btrfs_init_new_device()
2426 orig_super_num_devices = btrfs_super_num_devices(fs_info->super_copy); in btrfs_init_new_device()
2427 btrfs_set_super_num_devices(fs_info->super_copy, in btrfs_init_new_device()
2437 btrfs_clear_space_info_full(fs_info); in btrfs_init_new_device()
2439 mutex_unlock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2443 mutex_lock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2444 ret = init_first_rw_device(trans, fs_info); in btrfs_init_new_device()
2445 mutex_unlock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2461 ret = btrfs_finish_sprout(trans, fs_info); in btrfs_init_new_device()
2471 fs_info->fsid); in btrfs_init_new_device()
2473 btrfs_warn(fs_info, in btrfs_init_new_device()
2487 ret = btrfs_relocate_sys_chunks(fs_info); in btrfs_init_new_device()
2489 btrfs_handle_fs_error(fs_info, ret, in btrfs_init_new_device()
2508 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2509 mutex_lock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2512 fs_info->fs_devices->num_devices--; in btrfs_init_new_device()
2513 fs_info->fs_devices->open_devices--; in btrfs_init_new_device()
2514 fs_info->fs_devices->rw_devices--; in btrfs_init_new_device()
2515 fs_info->fs_devices->total_devices--; in btrfs_init_new_device()
2516 fs_info->fs_devices->total_rw_bytes -= device->total_bytes; in btrfs_init_new_device()
2517 atomic64_sub(device->total_bytes, &fs_info->free_chunk_space); in btrfs_init_new_device()
2518 btrfs_set_super_total_bytes(fs_info->super_copy, in btrfs_init_new_device()
2520 btrfs_set_super_num_devices(fs_info->super_copy, in btrfs_init_new_device()
2522 mutex_unlock(&fs_info->chunk_mutex); in btrfs_init_new_device()
2523 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2545 struct btrfs_root *root = device->fs_info->chunk_root; in btrfs_update_device()
2589 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_grow_device() local
2590 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_grow_device()
2598 new_size = round_down(new_size, fs_info->sectorsize); in btrfs_grow_device()
2600 mutex_lock(&fs_info->chunk_mutex); in btrfs_grow_device()
2602 diff = round_down(new_size - device->total_bytes, fs_info->sectorsize); in btrfs_grow_device()
2606 mutex_unlock(&fs_info->chunk_mutex); in btrfs_grow_device()
2610 fs_devices = fs_info->fs_devices; in btrfs_grow_device()
2613 round_down(old_total + diff, fs_info->sectorsize)); in btrfs_grow_device()
2618 btrfs_clear_space_info_full(device->fs_info); in btrfs_grow_device()
2622 mutex_unlock(&fs_info->chunk_mutex); in btrfs_grow_device()
2629 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_free_chunk() local
2630 struct btrfs_root *root = fs_info->chunk_root; in btrfs_free_chunk()
2647 btrfs_handle_fs_error(fs_info, -ENOENT, in btrfs_free_chunk()
2655 btrfs_handle_fs_error(fs_info, ret, in btrfs_free_chunk()
2662 static int btrfs_del_sys_chunk(struct btrfs_fs_info *fs_info, u64 chunk_offset) in btrfs_del_sys_chunk() argument
2664 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_del_sys_chunk()
2675 mutex_lock(&fs_info->chunk_mutex); in btrfs_del_sys_chunk()
2705 mutex_unlock(&fs_info->chunk_mutex); in btrfs_del_sys_chunk()
2709 static struct extent_map *get_chunk_map(struct btrfs_fs_info *fs_info, in get_chunk_map() argument
2715 em_tree = &fs_info->mapping_tree.map_tree; in get_chunk_map()
2721 btrfs_crit(fs_info, "unable to find logical %llu length %llu", in get_chunk_map()
2727 btrfs_crit(fs_info, in get_chunk_map()
2740 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_remove_chunk() local
2745 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_remove_chunk()
2747 em = get_chunk_map(fs_info, chunk_offset, 1); in btrfs_remove_chunk()
2758 mutex_lock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
2760 mutex_unlock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
2780 mutex_lock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
2783 atomic64_add(dev_extent_len, &fs_info->free_chunk_space); in btrfs_remove_chunk()
2784 btrfs_clear_space_info_full(fs_info); in btrfs_remove_chunk()
2785 mutex_unlock(&fs_info->chunk_mutex); in btrfs_remove_chunk()
2805 trace_btrfs_chunk_free(fs_info, map, chunk_offset, em->len); in btrfs_remove_chunk()
2808 ret = btrfs_del_sys_chunk(fs_info, chunk_offset); in btrfs_remove_chunk()
2827 static int btrfs_relocate_chunk(struct btrfs_fs_info *fs_info, u64 chunk_offset) in btrfs_relocate_chunk() argument
2829 struct btrfs_root *root = fs_info->chunk_root; in btrfs_relocate_chunk()
2845 lockdep_assert_held(&fs_info->delete_unused_bgs_mutex); in btrfs_relocate_chunk()
2847 ret = btrfs_can_relocate(fs_info, chunk_offset); in btrfs_relocate_chunk()
2852 btrfs_scrub_pause(fs_info); in btrfs_relocate_chunk()
2853 ret = btrfs_relocate_block_group(fs_info, chunk_offset); in btrfs_relocate_chunk()
2854 btrfs_scrub_continue(fs_info); in btrfs_relocate_chunk()
2866 btrfs_add_raid_kobjects(fs_info); in btrfs_relocate_chunk()
2868 trans = btrfs_start_trans_remove_block_group(root->fs_info, in btrfs_relocate_chunk()
2872 btrfs_handle_fs_error(root->fs_info, ret, NULL); in btrfs_relocate_chunk()
2885 static int btrfs_relocate_sys_chunks(struct btrfs_fs_info *fs_info) in btrfs_relocate_sys_chunks() argument
2887 struct btrfs_root *chunk_root = fs_info->chunk_root; in btrfs_relocate_sys_chunks()
2908 mutex_lock(&fs_info->delete_unused_bgs_mutex); in btrfs_relocate_sys_chunks()
2911 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_relocate_sys_chunks()
2919 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_relocate_sys_chunks()
2934 ret = btrfs_relocate_chunk(fs_info, found_key.offset); in btrfs_relocate_sys_chunks()
2940 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_relocate_sys_chunks()
2964 static int btrfs_may_alloc_data_chunk(struct btrfs_fs_info *fs_info, in btrfs_may_alloc_data_chunk() argument
2971 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in btrfs_may_alloc_data_chunk()
2977 spin_lock(&fs_info->data_sinfo->lock); in btrfs_may_alloc_data_chunk()
2978 bytes_used = fs_info->data_sinfo->bytes_used; in btrfs_may_alloc_data_chunk()
2979 spin_unlock(&fs_info->data_sinfo->lock); in btrfs_may_alloc_data_chunk()
2985 trans = btrfs_join_transaction(fs_info->tree_root); in btrfs_may_alloc_data_chunk()
2995 btrfs_add_raid_kobjects(fs_info); in btrfs_may_alloc_data_chunk()
3003 static int insert_balance_item(struct btrfs_fs_info *fs_info, in insert_balance_item() argument
3006 struct btrfs_root *root = fs_info->tree_root; in insert_balance_item()
3057 static int del_balance_item(struct btrfs_fs_info *fs_info) in del_balance_item() argument
3059 struct btrfs_root *root = fs_info->tree_root; in del_balance_item()
3142 static void reset_balance_state(struct btrfs_fs_info *fs_info) in reset_balance_state() argument
3144 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in reset_balance_state()
3147 BUG_ON(!fs_info->balance_ctl); in reset_balance_state()
3149 spin_lock(&fs_info->balance_lock); in reset_balance_state()
3150 fs_info->balance_ctl = NULL; in reset_balance_state()
3151 spin_unlock(&fs_info->balance_lock); in reset_balance_state()
3154 ret = del_balance_item(fs_info); in reset_balance_state()
3156 btrfs_handle_fs_error(fs_info, ret, NULL); in reset_balance_state()
3175 static int chunk_usage_range_filter(struct btrfs_fs_info *fs_info, u64 chunk_offset, in chunk_usage_range_filter() argument
3184 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in chunk_usage_range_filter()
3208 static int chunk_usage_filter(struct btrfs_fs_info *fs_info, in chunk_usage_filter() argument
3215 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in chunk_usage_filter()
3335 static int should_balance_chunk(struct btrfs_fs_info *fs_info, in should_balance_chunk() argument
3339 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in should_balance_chunk()
3364 chunk_usage_filter(fs_info, chunk_offset, bargs)) { in should_balance_chunk()
3367 chunk_usage_range_filter(fs_info, chunk_offset, bargs)) { in should_balance_chunk()
3424 static int __btrfs_balance(struct btrfs_fs_info *fs_info) in __btrfs_balance() argument
3426 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in __btrfs_balance()
3427 struct btrfs_root *chunk_root = fs_info->chunk_root; in __btrfs_balance()
3428 struct btrfs_root *dev_root = fs_info->dev_root; in __btrfs_balance()
3454 devices = &fs_info->fs_devices->devices; in __btrfs_balance()
3477 btrfs_info_in_rcu(fs_info, in __btrfs_balance()
3489 btrfs_info_in_rcu(fs_info, in __btrfs_balance()
3507 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3509 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3525 if ((!counting && atomic_read(&fs_info->balance_pause_req)) || in __btrfs_balance()
3526 atomic_read(&fs_info->balance_cancel_req)) { in __btrfs_balance()
3531 mutex_lock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3534 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3548 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3558 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3566 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3568 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3571 ret = should_balance_chunk(fs_info, leaf, chunk, in __btrfs_balance()
3576 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3581 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3582 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3584 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3606 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3617 ret = btrfs_may_alloc_data_chunk(fs_info, in __btrfs_balance()
3620 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3627 ret = btrfs_relocate_chunk(fs_info, found_key.offset); in __btrfs_balance()
3628 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3634 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3636 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3652 btrfs_info(fs_info, "%d enospc errors during balance", in __btrfs_balance()
3685 static inline int balance_need_close(struct btrfs_fs_info *fs_info) in balance_need_close() argument
3688 return atomic_read(&fs_info->balance_cancel_req) || in balance_need_close()
3689 (atomic_read(&fs_info->balance_pause_req) == 0 && in balance_need_close()
3690 atomic_read(&fs_info->balance_cancel_req) == 0); in balance_need_close()
3705 int btrfs_balance(struct btrfs_fs_info *fs_info, in btrfs_balance() argument
3716 if (btrfs_fs_closing(fs_info) || in btrfs_balance()
3717 atomic_read(&fs_info->balance_pause_req) || in btrfs_balance()
3718 atomic_read(&fs_info->balance_cancel_req)) { in btrfs_balance()
3723 allowed = btrfs_super_incompat_flags(fs_info->super_copy); in btrfs_balance()
3736 btrfs_err(fs_info, in btrfs_balance()
3743 num_devices = fs_info->fs_devices->num_devices; in btrfs_balance()
3744 btrfs_dev_replace_read_lock(&fs_info->dev_replace); in btrfs_balance()
3745 if (btrfs_dev_replace_is_ongoing(&fs_info->dev_replace)) { in btrfs_balance()
3749 btrfs_dev_replace_read_unlock(&fs_info->dev_replace); in btrfs_balance()
3761 btrfs_err(fs_info, in btrfs_balance()
3770 btrfs_err(fs_info, in btrfs_balance()
3779 btrfs_err(fs_info, in btrfs_balance()
3792 seq = read_seqbegin(&fs_info->profiles_lock); in btrfs_balance()
3795 (fs_info->avail_system_alloc_bits & allowed) && in btrfs_balance()
3798 (fs_info->avail_metadata_alloc_bits & allowed) && in btrfs_balance()
3801 btrfs_info(fs_info, in btrfs_balance()
3804 btrfs_err(fs_info, in btrfs_balance()
3810 } while (read_seqretry(&fs_info->profiles_lock, seq)); in btrfs_balance()
3814 bctl->meta.target : fs_info->avail_metadata_alloc_bits; in btrfs_balance()
3816 bctl->data.target : fs_info->avail_data_alloc_bits; in btrfs_balance()
3822 btrfs_warn(fs_info, in btrfs_balance()
3827 ret = insert_balance_item(fs_info, bctl); in btrfs_balance()
3833 BUG_ON(fs_info->balance_ctl); in btrfs_balance()
3834 spin_lock(&fs_info->balance_lock); in btrfs_balance()
3835 fs_info->balance_ctl = bctl; in btrfs_balance()
3836 spin_unlock(&fs_info->balance_lock); in btrfs_balance()
3839 spin_lock(&fs_info->balance_lock); in btrfs_balance()
3841 spin_unlock(&fs_info->balance_lock); in btrfs_balance()
3844 ASSERT(!test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_balance()
3845 set_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags); in btrfs_balance()
3846 mutex_unlock(&fs_info->balance_mutex); in btrfs_balance()
3848 ret = __btrfs_balance(fs_info); in btrfs_balance()
3850 mutex_lock(&fs_info->balance_mutex); in btrfs_balance()
3851 clear_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags); in btrfs_balance()
3855 btrfs_update_ioctl_balance_args(fs_info, bargs); in btrfs_balance()
3859 balance_need_close(fs_info)) { in btrfs_balance()
3860 reset_balance_state(fs_info); in btrfs_balance()
3861 clear_bit(BTRFS_FS_EXCL_OP, &fs_info->flags); in btrfs_balance()
3864 wake_up(&fs_info->balance_wait_q); in btrfs_balance()
3869 reset_balance_state(fs_info); in btrfs_balance()
3872 clear_bit(BTRFS_FS_EXCL_OP, &fs_info->flags); in btrfs_balance()
3879 struct btrfs_fs_info *fs_info = data; in balance_kthread() local
3882 mutex_lock(&fs_info->balance_mutex); in balance_kthread()
3883 if (fs_info->balance_ctl) { in balance_kthread()
3884 btrfs_info(fs_info, "balance: resuming"); in balance_kthread()
3885 ret = btrfs_balance(fs_info, fs_info->balance_ctl, NULL); in balance_kthread()
3887 mutex_unlock(&fs_info->balance_mutex); in balance_kthread()
3892 int btrfs_resume_balance_async(struct btrfs_fs_info *fs_info) in btrfs_resume_balance_async() argument
3896 mutex_lock(&fs_info->balance_mutex); in btrfs_resume_balance_async()
3897 if (!fs_info->balance_ctl) { in btrfs_resume_balance_async()
3898 mutex_unlock(&fs_info->balance_mutex); in btrfs_resume_balance_async()
3901 mutex_unlock(&fs_info->balance_mutex); in btrfs_resume_balance_async()
3903 if (btrfs_test_opt(fs_info, SKIP_BALANCE)) { in btrfs_resume_balance_async()
3904 btrfs_info(fs_info, "balance: resume skipped"); in btrfs_resume_balance_async()
3913 spin_lock(&fs_info->balance_lock); in btrfs_resume_balance_async()
3914 fs_info->balance_ctl->flags |= BTRFS_BALANCE_RESUME; in btrfs_resume_balance_async()
3915 spin_unlock(&fs_info->balance_lock); in btrfs_resume_balance_async()
3917 tsk = kthread_run(balance_kthread, fs_info, "btrfs-balance"); in btrfs_resume_balance_async()
3921 int btrfs_recover_balance(struct btrfs_fs_info *fs_info) in btrfs_recover_balance() argument
3939 ret = btrfs_search_slot(NULL, fs_info->tree_root, &key, path, 0, 0); in btrfs_recover_balance()
3976 if (test_and_set_bit(BTRFS_FS_EXCL_OP, &fs_info->flags)) in btrfs_recover_balance()
3977 btrfs_warn(fs_info, in btrfs_recover_balance()
3980 mutex_lock(&fs_info->balance_mutex); in btrfs_recover_balance()
3981 BUG_ON(fs_info->balance_ctl); in btrfs_recover_balance()
3982 spin_lock(&fs_info->balance_lock); in btrfs_recover_balance()
3983 fs_info->balance_ctl = bctl; in btrfs_recover_balance()
3984 spin_unlock(&fs_info->balance_lock); in btrfs_recover_balance()
3985 mutex_unlock(&fs_info->balance_mutex); in btrfs_recover_balance()
3991 int btrfs_pause_balance(struct btrfs_fs_info *fs_info) in btrfs_pause_balance() argument
3995 mutex_lock(&fs_info->balance_mutex); in btrfs_pause_balance()
3996 if (!fs_info->balance_ctl) { in btrfs_pause_balance()
3997 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
4001 if (test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)) { in btrfs_pause_balance()
4002 atomic_inc(&fs_info->balance_pause_req); in btrfs_pause_balance()
4003 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
4005 wait_event(fs_info->balance_wait_q, in btrfs_pause_balance()
4006 !test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_pause_balance()
4008 mutex_lock(&fs_info->balance_mutex); in btrfs_pause_balance()
4010 BUG_ON(test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_pause_balance()
4011 atomic_dec(&fs_info->balance_pause_req); in btrfs_pause_balance()
4016 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
4020 int btrfs_cancel_balance(struct btrfs_fs_info *fs_info) in btrfs_cancel_balance() argument
4022 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4023 if (!fs_info->balance_ctl) { in btrfs_cancel_balance()
4024 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4033 if (sb_rdonly(fs_info->sb)) { in btrfs_cancel_balance()
4034 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4038 atomic_inc(&fs_info->balance_cancel_req); in btrfs_cancel_balance()
4043 if (test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)) { in btrfs_cancel_balance()
4044 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4045 wait_event(fs_info->balance_wait_q, in btrfs_cancel_balance()
4046 !test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_cancel_balance()
4047 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4049 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4054 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4056 if (fs_info->balance_ctl) { in btrfs_cancel_balance()
4057 reset_balance_state(fs_info); in btrfs_cancel_balance()
4058 clear_bit(BTRFS_FS_EXCL_OP, &fs_info->flags); in btrfs_cancel_balance()
4059 btrfs_info(fs_info, "balance: canceled"); in btrfs_cancel_balance()
4063 BUG_ON(fs_info->balance_ctl || in btrfs_cancel_balance()
4064 test_bit(BTRFS_FS_BALANCE_RUNNING, &fs_info->flags)); in btrfs_cancel_balance()
4065 atomic_dec(&fs_info->balance_cancel_req); in btrfs_cancel_balance()
4066 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
4072 struct btrfs_fs_info *fs_info = data; in btrfs_uuid_scan_kthread() local
4073 struct btrfs_root *root = fs_info->tree_root; in btrfs_uuid_scan_kthread()
4130 trans = btrfs_start_transaction(fs_info->uuid_root, 2); in btrfs_uuid_scan_kthread()
4145 btrfs_warn(fs_info, "uuid_tree_add failed %d", in btrfs_uuid_scan_kthread()
4157 btrfs_warn(fs_info, "uuid_tree_add failed %d", in btrfs_uuid_scan_kthread()
4192 btrfs_warn(fs_info, "btrfs_uuid_scan_kthread failed %d", ret); in btrfs_uuid_scan_kthread()
4194 set_bit(BTRFS_FS_UPDATE_UUID_TREE_GEN, &fs_info->flags); in btrfs_uuid_scan_kthread()
4195 up(&fs_info->uuid_tree_rescan_sem); in btrfs_uuid_scan_kthread()
4206 static int btrfs_check_uuid_tree_entry(struct btrfs_fs_info *fs_info, in btrfs_check_uuid_tree_entry() argument
4220 subvol_root = btrfs_read_fs_root_no_name(fs_info, &key); in btrfs_check_uuid_tree_entry()
4246 struct btrfs_fs_info *fs_info = (struct btrfs_fs_info *)data; in btrfs_uuid_rescan_kthread() local
4254 ret = btrfs_uuid_tree_iterate(fs_info, btrfs_check_uuid_tree_entry); in btrfs_uuid_rescan_kthread()
4256 btrfs_warn(fs_info, "iterating uuid_tree failed %d", ret); in btrfs_uuid_rescan_kthread()
4257 up(&fs_info->uuid_tree_rescan_sem); in btrfs_uuid_rescan_kthread()
4263 int btrfs_create_uuid_tree(struct btrfs_fs_info *fs_info) in btrfs_create_uuid_tree() argument
4266 struct btrfs_root *tree_root = fs_info->tree_root; in btrfs_create_uuid_tree()
4279 uuid_root = btrfs_create_tree(trans, fs_info, in btrfs_create_uuid_tree()
4288 fs_info->uuid_root = uuid_root; in btrfs_create_uuid_tree()
4294 down(&fs_info->uuid_tree_rescan_sem); in btrfs_create_uuid_tree()
4295 task = kthread_run(btrfs_uuid_scan_kthread, fs_info, "btrfs-uuid"); in btrfs_create_uuid_tree()
4298 btrfs_warn(fs_info, "failed to start uuid_scan task"); in btrfs_create_uuid_tree()
4299 up(&fs_info->uuid_tree_rescan_sem); in btrfs_create_uuid_tree()
4306 int btrfs_check_uuid_tree(struct btrfs_fs_info *fs_info) in btrfs_check_uuid_tree() argument
4310 down(&fs_info->uuid_tree_rescan_sem); in btrfs_check_uuid_tree()
4311 task = kthread_run(btrfs_uuid_rescan_kthread, fs_info, "btrfs-uuid"); in btrfs_check_uuid_tree()
4314 btrfs_warn(fs_info, "failed to start uuid_rescan task"); in btrfs_check_uuid_tree()
4315 up(&fs_info->uuid_tree_rescan_sem); in btrfs_check_uuid_tree()
4329 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_shrink_device() local
4330 struct btrfs_root *root = fs_info->dev_root; in btrfs_shrink_device()
4343 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_shrink_device()
4348 new_size = round_down(new_size, fs_info->sectorsize); in btrfs_shrink_device()
4349 diff = round_down(old_size - new_size, fs_info->sectorsize); in btrfs_shrink_device()
4360 mutex_lock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4365 atomic64_sub(diff, &fs_info->free_chunk_space); in btrfs_shrink_device()
4367 mutex_unlock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4375 mutex_lock(&fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4378 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4384 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4398 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4407 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4421 ret = btrfs_may_alloc_data_chunk(fs_info, chunk_offset); in btrfs_shrink_device()
4423 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4427 ret = btrfs_relocate_chunk(fs_info, chunk_offset); in btrfs_shrink_device()
4428 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4451 mutex_lock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4471 mutex_unlock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4485 &fs_info->fs_devices->resized_devices); in btrfs_shrink_device()
4489 round_down(old_total - diff, fs_info->sectorsize)); in btrfs_shrink_device()
4490 mutex_unlock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4503 mutex_lock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4507 atomic64_add(diff, &fs_info->free_chunk_space); in btrfs_shrink_device()
4508 mutex_unlock(&fs_info->chunk_mutex); in btrfs_shrink_device()
4513 static int btrfs_add_system_chunk(struct btrfs_fs_info *fs_info, in btrfs_add_system_chunk() argument
4517 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_add_system_chunk()
4522 mutex_lock(&fs_info->chunk_mutex); in btrfs_add_system_chunk()
4526 mutex_unlock(&fs_info->chunk_mutex); in btrfs_add_system_chunk()
4537 mutex_unlock(&fs_info->chunk_mutex); in btrfs_add_system_chunk()
4581 struct btrfs_fs_info *info = trans->fs_info; in __btrfs_alloc_chunk()
4871 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_finish_chunk_alloc() local
4872 struct btrfs_root *extent_root = fs_info->extent_root; in btrfs_finish_chunk_alloc()
4873 struct btrfs_root *chunk_root = fs_info->chunk_root; in btrfs_finish_chunk_alloc()
4886 em = get_chunk_map(fs_info, chunk_offset, chunk_size); in btrfs_finish_chunk_alloc()
4907 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_finish_chunk_alloc()
4921 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_finish_chunk_alloc()
4935 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_finish_chunk_alloc()
4944 btrfs_set_stack_chunk_sector_size(chunk, fs_info->sectorsize); in btrfs_finish_chunk_alloc()
4957 ret = btrfs_add_system_chunk(fs_info, &key, chunk, item_size); in btrfs_finish_chunk_alloc()
4977 lockdep_assert_held(&trans->fs_info->chunk_mutex); in btrfs_alloc_chunk()
4978 chunk_offset = find_next_chunk(trans->fs_info); in btrfs_alloc_chunk()
4983 struct btrfs_fs_info *fs_info) in init_first_rw_device() argument
4990 chunk_offset = find_next_chunk(fs_info); in init_first_rw_device()
4991 alloc_profile = btrfs_metadata_alloc_profile(fs_info); in init_first_rw_device()
4996 sys_chunk_offset = find_next_chunk(fs_info); in init_first_rw_device()
4997 alloc_profile = btrfs_system_alloc_profile(fs_info); in init_first_rw_device()
5020 int btrfs_chunk_readonly(struct btrfs_fs_info *fs_info, u64 chunk_offset) in btrfs_chunk_readonly() argument
5028 em = get_chunk_map(fs_info, chunk_offset, 1); in btrfs_chunk_readonly()
5082 int btrfs_num_copies(struct btrfs_fs_info *fs_info, u64 logical, u64 len) in btrfs_num_copies() argument
5088 em = get_chunk_map(fs_info, logical, len); in btrfs_num_copies()
5118 btrfs_dev_replace_read_lock(&fs_info->dev_replace); in btrfs_num_copies()
5119 if (btrfs_dev_replace_is_ongoing(&fs_info->dev_replace) && in btrfs_num_copies()
5120 fs_info->dev_replace.tgtdev) in btrfs_num_copies()
5122 btrfs_dev_replace_read_unlock(&fs_info->dev_replace); in btrfs_num_copies()
5127 unsigned long btrfs_full_stripe_len(struct btrfs_fs_info *fs_info, in btrfs_full_stripe_len() argument
5132 unsigned long len = fs_info->sectorsize; in btrfs_full_stripe_len()
5134 em = get_chunk_map(fs_info, logical, len); in btrfs_full_stripe_len()
5145 int btrfs_is_parity_mirror(struct btrfs_fs_info *fs_info, u64 logical, u64 len) in btrfs_is_parity_mirror() argument
5151 em = get_chunk_map(fs_info, logical, len); in btrfs_is_parity_mirror()
5162 static int find_live_mirror(struct btrfs_fs_info *fs_info, in find_live_mirror() argument
5183 fs_info->dev_replace.cont_reading_from_srcdev_mode == in find_live_mirror()
5185 srcdev = fs_info->dev_replace.srcdev; in find_live_mirror()
5283 static int __btrfs_map_block_for_discard(struct btrfs_fs_info *fs_info, in __btrfs_map_block_for_discard() argument
5310 em = get_chunk_map(fs_info, logical, length); in __btrfs_map_block_for_discard()
5443 static int get_extra_mirror_from_replace(struct btrfs_fs_info *fs_info, in get_extra_mirror_from_replace() argument
5456 ret = __btrfs_map_block(fs_info, BTRFS_MAP_GET_READ_MIRRORS, in get_extra_mirror_from_replace()
5606 static int __btrfs_map_block(struct btrfs_fs_info *fs_info, in __btrfs_map_block() argument
5625 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in __btrfs_map_block()
5633 return __btrfs_map_block_for_discard(fs_info, logical, in __btrfs_map_block()
5636 em = get_chunk_map(fs_info, logical, *length); in __btrfs_map_block()
5653 btrfs_crit(fs_info, in __btrfs_map_block()
5709 ret = get_extra_mirror_from_replace(fs_info, logical, *length, in __btrfs_map_block()
5734 stripe_index = find_live_mirror(fs_info, map, 0, in __btrfs_map_block()
5760 stripe_index = find_live_mirror(fs_info, map, in __btrfs_map_block()
5808 btrfs_crit(fs_info, in __btrfs_map_block()
5907 int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, in btrfs_map_block() argument
5911 return __btrfs_map_block(fs_info, op, logical, length, bbio_ret, in btrfs_map_block()
5916 int btrfs_map_sblock(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, in btrfs_map_sblock() argument
5920 return __btrfs_map_block(fs_info, op, logical, length, bbio_ret, 0, 1); in btrfs_map_sblock()
5923 int btrfs_rmap_block(struct btrfs_fs_info *fs_info, u64 chunk_start, in btrfs_rmap_block() argument
5935 em = get_chunk_map(fs_info, chunk_start, 1); in btrfs_rmap_block()
6033 btrfs_bio_counter_dec(bbio->fs_info); in btrfs_end_bio()
6071 struct btrfs_fs_info *fs_info = device->fs_info; in btrfs_schedule_bio() local
6108 btrfs_queue_work(fs_info->submit_workers, &device->work); in btrfs_schedule_bio()
6115 struct btrfs_fs_info *fs_info = bbio->fs_info; in submit_stripe_bio() local
6121 btrfs_debug_in_rcu(fs_info, in submit_stripe_bio()
6128 btrfs_bio_counter_inc_noblocked(fs_info); in submit_stripe_bio()
6153 blk_status_t btrfs_map_bio(struct btrfs_fs_info *fs_info, struct bio *bio, in btrfs_map_bio() argument
6169 btrfs_bio_counter_inc_blocked(fs_info); in btrfs_map_bio()
6170 ret = __btrfs_map_block(fs_info, btrfs_op(bio), logical, in btrfs_map_bio()
6173 btrfs_bio_counter_dec(fs_info); in btrfs_map_bio()
6181 bbio->fs_info = fs_info; in btrfs_map_bio()
6189 ret = raid56_parity_write(fs_info, bio, bbio, in btrfs_map_bio()
6192 ret = raid56_parity_recover(fs_info, bio, bbio, in btrfs_map_bio()
6196 btrfs_bio_counter_dec(fs_info); in btrfs_map_bio()
6201 btrfs_crit(fs_info, in btrfs_map_bio()
6224 btrfs_bio_counter_dec(fs_info); in btrfs_map_bio()
6228 struct btrfs_device *btrfs_find_device(struct btrfs_fs_info *fs_info, u64 devid, in btrfs_find_device() argument
6234 cur_devices = fs_info->fs_devices; in btrfs_find_device()
6279 struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info, in btrfs_alloc_device() argument
6286 if (WARN_ON(!devid && !fs_info)) in btrfs_alloc_device()
6298 ret = find_next_devid(fs_info, &tmp); in btrfs_alloc_device()
6318 static int btrfs_check_chunk_valid(struct btrfs_fs_info *fs_info, in btrfs_check_chunk_valid() argument
6337 btrfs_err(fs_info, "invalid chunk num_stripes: %u", in btrfs_check_chunk_valid()
6341 if (!IS_ALIGNED(logical, fs_info->sectorsize)) { in btrfs_check_chunk_valid()
6342 btrfs_err(fs_info, "invalid chunk logical %llu", logical); in btrfs_check_chunk_valid()
6345 if (btrfs_chunk_sector_size(leaf, chunk) != fs_info->sectorsize) { in btrfs_check_chunk_valid()
6346 btrfs_err(fs_info, "invalid chunk sectorsize %u", in btrfs_check_chunk_valid()
6350 if (!length || !IS_ALIGNED(length, fs_info->sectorsize)) { in btrfs_check_chunk_valid()
6351 btrfs_err(fs_info, "invalid chunk length %llu", length); in btrfs_check_chunk_valid()
6355 btrfs_err(fs_info, "invalid chunk stripe length: %llu", in btrfs_check_chunk_valid()
6361 btrfs_err(fs_info, "unrecognized chunk type: %llu", in btrfs_check_chunk_valid()
6369 btrfs_err(fs_info, "missing chunk type flag: 0x%llx", type); in btrfs_check_chunk_valid()
6375 btrfs_err(fs_info, in btrfs_check_chunk_valid()
6380 features = btrfs_super_incompat_flags(fs_info->super_copy); in btrfs_check_chunk_valid()
6387 btrfs_err(fs_info, in btrfs_check_chunk_valid()
6400 btrfs_err(fs_info, in btrfs_check_chunk_valid()
6410 static void btrfs_report_missing_device(struct btrfs_fs_info *fs_info, in btrfs_report_missing_device() argument
6414 btrfs_err_rl(fs_info, "devid %llu uuid %pU is missing", in btrfs_report_missing_device()
6417 btrfs_warn_rl(fs_info, "devid %llu uuid %pU is missing", in btrfs_report_missing_device()
6421 static int read_one_chunk(struct btrfs_fs_info *fs_info, struct btrfs_key *key, in read_one_chunk() argument
6425 struct btrfs_mapping_tree *map_tree = &fs_info->mapping_tree; in read_one_chunk()
6440 ret = btrfs_check_chunk_valid(fs_info, leaf, chunk, logical); in read_one_chunk()
6487 map->stripes[i].dev = btrfs_find_device(fs_info, devid, in read_one_chunk()
6490 !btrfs_test_opt(fs_info, DEGRADED)) { in read_one_chunk()
6492 btrfs_report_missing_device(fs_info, devid, uuid, true); in read_one_chunk()
6497 add_missing_dev(fs_info->fs_devices, devid, in read_one_chunk()
6501 btrfs_err(fs_info, in read_one_chunk()
6506 btrfs_report_missing_device(fs_info, devid, uuid, false); in read_one_chunk()
6517 btrfs_err(fs_info, in read_one_chunk()
6549 static struct btrfs_fs_devices *open_seed_devices(struct btrfs_fs_info *fs_info, in open_seed_devices() argument
6558 fs_devices = fs_info->fs_devices->seed; in open_seed_devices()
6568 if (!btrfs_test_opt(fs_info, DEGRADED)) in open_seed_devices()
6584 ret = open_fs_devices(fs_devices, FMODE_READ, fs_info->bdev_holder); in open_seed_devices()
6598 fs_devices->seed = fs_info->fs_devices->seed; in open_seed_devices()
6599 fs_info->fs_devices->seed = fs_devices; in open_seed_devices()
6604 static int read_one_dev(struct btrfs_fs_info *fs_info, in read_one_dev() argument
6608 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in read_one_dev()
6621 if (memcmp(fs_uuid, fs_info->fsid, BTRFS_FSID_SIZE)) { in read_one_dev()
6622 fs_devices = open_seed_devices(fs_info, fs_uuid); in read_one_dev()
6627 device = btrfs_find_device(fs_info, devid, dev_uuid, fs_uuid); in read_one_dev()
6629 if (!btrfs_test_opt(fs_info, DEGRADED)) { in read_one_dev()
6630 btrfs_report_missing_device(fs_info, devid, in read_one_dev()
6637 btrfs_err(fs_info, in read_one_dev()
6642 btrfs_report_missing_device(fs_info, devid, dev_uuid, false); in read_one_dev()
6645 if (!btrfs_test_opt(fs_info, DEGRADED)) { in read_one_dev()
6646 btrfs_report_missing_device(fs_info, in read_one_dev()
6650 btrfs_report_missing_device(fs_info, devid, in read_one_dev()
6682 if (device->fs_devices != fs_info->fs_devices) { in read_one_dev()
6695 &fs_info->free_chunk_space); in read_one_dev()
6701 int btrfs_read_sys_array(struct btrfs_fs_info *fs_info) in btrfs_read_sys_array() argument
6703 struct btrfs_root *root = fs_info->tree_root; in btrfs_read_sys_array()
6704 struct btrfs_super_block *super_copy = fs_info->super_copy; in btrfs_read_sys_array()
6718 ASSERT(BTRFS_SUPER_INFO_SIZE <= fs_info->nodesize); in btrfs_read_sys_array()
6724 sb = btrfs_find_create_tree_block(fs_info, BTRFS_SUPER_INFO_OFFSET); in btrfs_read_sys_array()
6775 btrfs_err(fs_info, in btrfs_read_sys_array()
6784 btrfs_err(fs_info, in btrfs_read_sys_array()
6795 ret = read_one_chunk(fs_info, &key, sb, chunk); in btrfs_read_sys_array()
6799 btrfs_err(fs_info, in btrfs_read_sys_array()
6814 btrfs_err(fs_info, "sys_array too short to read %u bytes at offset %u", in btrfs_read_sys_array()
6829 bool btrfs_check_rw_degradable(struct btrfs_fs_info *fs_info, in btrfs_check_rw_degradable() argument
6832 struct btrfs_mapping_tree *map_tree = &fs_info->mapping_tree; in btrfs_check_rw_degradable()
6867 btrfs_warn(fs_info, in btrfs_check_rw_degradable()
6886 int btrfs_read_chunk_tree(struct btrfs_fs_info *fs_info) in btrfs_read_chunk_tree() argument
6888 struct btrfs_root *root = fs_info->chunk_root; in btrfs_read_chunk_tree()
6906 mutex_lock(&fs_info->chunk_mutex); in btrfs_read_chunk_tree()
6936 ret = read_one_dev(fs_info, leaf, dev_item); in btrfs_read_chunk_tree()
6943 ret = read_one_chunk(fs_info, &found_key, leaf, chunk); in btrfs_read_chunk_tree()
6954 if (total_dev != fs_info->fs_devices->total_devices) { in btrfs_read_chunk_tree()
6955 btrfs_err(fs_info, in btrfs_read_chunk_tree()
6957 btrfs_super_num_devices(fs_info->super_copy), in btrfs_read_chunk_tree()
6962 if (btrfs_super_total_bytes(fs_info->super_copy) < in btrfs_read_chunk_tree()
6963 fs_info->fs_devices->total_rw_bytes) { in btrfs_read_chunk_tree()
6964 btrfs_err(fs_info, in btrfs_read_chunk_tree()
6966 btrfs_super_total_bytes(fs_info->super_copy), in btrfs_read_chunk_tree()
6967 fs_info->fs_devices->total_rw_bytes); in btrfs_read_chunk_tree()
6973 mutex_unlock(&fs_info->chunk_mutex); in btrfs_read_chunk_tree()
6980 void btrfs_init_devices_late(struct btrfs_fs_info *fs_info) in btrfs_init_devices_late() argument
6982 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_devices_late()
6988 device->fs_info = fs_info; in btrfs_init_devices_late()
7003 int btrfs_init_dev_stats(struct btrfs_fs_info *fs_info) in btrfs_init_dev_stats() argument
7007 struct btrfs_root *dev_root = fs_info->dev_root; in btrfs_init_dev_stats()
7008 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_dev_stats()
7067 struct btrfs_fs_info *fs_info = trans->fs_info; in update_dev_stat_item() local
7068 struct btrfs_root *dev_root = fs_info->dev_root; in update_dev_stat_item()
7085 btrfs_warn_in_rcu(fs_info, in update_dev_stat_item()
7096 btrfs_warn_in_rcu(fs_info, in update_dev_stat_item()
7110 btrfs_warn_in_rcu(fs_info, in update_dev_stat_item()
7133 struct btrfs_fs_info *fs_info) in btrfs_run_dev_stats() argument
7135 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_run_dev_stats()
7179 btrfs_err_rl_in_rcu(dev->fs_info, in btrfs_dev_stat_print_on_error()
7199 btrfs_info_in_rcu(dev->fs_info, in btrfs_dev_stat_print_on_load()
7209 int btrfs_get_dev_stats(struct btrfs_fs_info *fs_info, in btrfs_get_dev_stats() argument
7213 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_get_dev_stats()
7217 dev = btrfs_find_device(fs_info, stats->devid, NULL, NULL); in btrfs_get_dev_stats()
7221 btrfs_warn(fs_info, "get dev_stats failed, device not found"); in btrfs_get_dev_stats()
7224 btrfs_warn(fs_info, "get dev_stats failed, not yet valid"); in btrfs_get_dev_stats()
7278 void btrfs_update_commit_device_size(struct btrfs_fs_info *fs_info) in btrfs_update_commit_device_size() argument
7280 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_update_commit_device_size()
7287 mutex_lock(&fs_info->chunk_mutex); in btrfs_update_commit_device_size()
7293 mutex_unlock(&fs_info->chunk_mutex); in btrfs_update_commit_device_size()
7300 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_update_commit_device_bytes_used() local
7310 mutex_lock(&fs_info->chunk_mutex); in btrfs_update_commit_device_bytes_used()
7319 mutex_unlock(&fs_info->chunk_mutex); in btrfs_update_commit_device_bytes_used()
7322 void btrfs_set_fs_info_ptr(struct btrfs_fs_info *fs_info) in btrfs_set_fs_info_ptr() argument
7324 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_set_fs_info_ptr()
7326 fs_devices->fs_info = fs_info; in btrfs_set_fs_info_ptr()
7331 void btrfs_reset_fs_info_ptr(struct btrfs_fs_info *fs_info) in btrfs_reset_fs_info_ptr() argument
7333 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_reset_fs_info_ptr()
7335 fs_devices->fs_info = NULL; in btrfs_reset_fs_info_ptr()
7372 static int verify_one_dev_extent(struct btrfs_fs_info *fs_info, in verify_one_dev_extent() argument
7376 struct extent_map_tree *em_tree = &fs_info->mapping_tree.map_tree; in verify_one_dev_extent()
7389 btrfs_err(fs_info, in verify_one_dev_extent()
7399 btrfs_err(fs_info, in verify_one_dev_extent()
7412 btrfs_err(fs_info, in verify_one_dev_extent()
7423 btrfs_err(fs_info, in verify_one_dev_extent()
7433 static int verify_chunk_dev_extent_mapping(struct btrfs_fs_info *fs_info) in verify_chunk_dev_extent_mapping() argument
7435 struct extent_map_tree *em_tree = &fs_info->mapping_tree.map_tree; in verify_chunk_dev_extent_mapping()
7445 btrfs_err(fs_info, in verify_chunk_dev_extent_mapping()
7465 int btrfs_verify_dev_extents(struct btrfs_fs_info *fs_info) in btrfs_verify_dev_extents() argument
7468 struct btrfs_root *root = fs_info->dev_root; in btrfs_verify_dev_extents()
7514 ret = verify_one_dev_extent(fs_info, chunk_offset, devid, in btrfs_verify_dev_extents()
7528 ret = verify_chunk_dev_extent_mapping(fs_info); in btrfs_verify_dev_extents()