Lines Matching refs:fs_info
333 struct btrfs_fs_info *fs_info; in run_scheduled_bios() local
355 fs_info = device->dev_root->fs_info; in run_scheduled_bios()
356 limit = btrfs_async_submit_limit(fs_info); in run_scheduled_bios()
427 if (atomic_dec_return(&fs_info->nr_async_bios) < limit && in run_scheduled_bios()
428 waitqueue_active(&fs_info->async_submit_wait)) in run_scheduled_bios()
429 wake_up(&fs_info->async_submit_wait); in run_scheduled_bios()
461 fs_info->fs_devices->open_devices > 1) { in run_scheduled_bios()
494 btrfs_queue_work(fs_info->submit_workers, in run_scheduled_bios()
1173 struct btrfs_fs_info *fs_info = device->dev_root->fs_info; in contains_pending_extent() local
1175 struct list_head *search_list = &fs_info->pinned_chunks; in contains_pending_extent()
1215 if (search_list != &fs_info->pinned_chunks) { in contains_pending_extent()
1216 search_list = &fs_info->pinned_chunks; in contains_pending_extent()
1268 min_search_start = max(root->fs_info->alloc_start, 1024ull * 1024); in find_free_dev_extent_start()
1455 btrfs_std_error(root->fs_info, ret, "Slot search failed"); in btrfs_free_dev_extent()
1463 btrfs_std_error(root->fs_info, ret, in btrfs_free_dev_extent()
1506 write_extent_buffer(leaf, root->fs_info->chunk_tree_uuid, in btrfs_alloc_dev_extent()
1516 static u64 find_next_chunk(struct btrfs_fs_info *fs_info) in find_next_chunk() argument
1523 em_tree = &fs_info->mapping_tree.map_tree; in find_next_chunk()
1535 static noinline int find_next_devid(struct btrfs_fs_info *fs_info, in find_next_devid() argument
1551 ret = btrfs_search_slot(NULL, fs_info->chunk_root, &key, path, 0, 0); in find_next_devid()
1557 ret = btrfs_previous_item(fs_info->chunk_root, path, in find_next_devid()
1588 root = root->fs_info->chunk_root; in btrfs_add_device()
1624 write_extent_buffer(leaf, root->fs_info->fsid, ptr, BTRFS_UUID_SIZE); in btrfs_add_device()
1657 root = root->fs_info->chunk_root; in btrfs_rm_dev_item()
1709 seq = read_seqbegin(&root->fs_info->profiles_lock); in btrfs_rm_device()
1711 all_avail = root->fs_info->avail_data_alloc_bits | in btrfs_rm_device()
1712 root->fs_info->avail_system_alloc_bits | in btrfs_rm_device()
1713 root->fs_info->avail_metadata_alloc_bits; in btrfs_rm_device()
1714 } while (read_seqretry(&root->fs_info->profiles_lock, seq)); in btrfs_rm_device()
1716 num_devices = root->fs_info->fs_devices->num_devices; in btrfs_rm_device()
1717 btrfs_dev_replace_lock(&root->fs_info->dev_replace); in btrfs_rm_device()
1718 if (btrfs_dev_replace_is_ongoing(&root->fs_info->dev_replace)) { in btrfs_rm_device()
1722 btrfs_dev_replace_unlock(&root->fs_info->dev_replace); in btrfs_rm_device()
1735 root->fs_info->fs_devices->rw_devices <= 2) { in btrfs_rm_device()
1740 root->fs_info->fs_devices->rw_devices <= 3) { in btrfs_rm_device()
1750 devices = &root->fs_info->fs_devices->devices; in btrfs_rm_device()
1773 root->fs_info->bdev_holder, 0, in btrfs_rm_device()
1780 device = btrfs_find_device(root->fs_info, devid, dev_uuid, in btrfs_rm_device()
1793 if (device->writeable && root->fs_info->fs_devices->rw_devices == 1) { in btrfs_rm_device()
1817 ret = btrfs_rm_dev_item(root->fs_info->chunk_root, device); in btrfs_rm_device()
1822 btrfs_scrub_cancel_dev(root->fs_info, device); in btrfs_rm_device()
1835 mutex_lock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_rm_device()
1844 next_device = list_entry(root->fs_info->fs_devices->devices.next, in btrfs_rm_device()
1846 if (device->bdev == root->fs_info->sb->s_bdev) in btrfs_rm_device()
1847 root->fs_info->sb->s_bdev = next_device->bdev; in btrfs_rm_device()
1848 if (device->bdev == root->fs_info->fs_devices->latest_bdev) in btrfs_rm_device()
1849 root->fs_info->fs_devices->latest_bdev = next_device->bdev; in btrfs_rm_device()
1854 btrfs_sysfs_rm_device_link(root->fs_info->fs_devices, device); in btrfs_rm_device()
1859 num_devices = btrfs_super_num_devices(root->fs_info->super_copy) - 1; in btrfs_rm_device()
1860 btrfs_set_super_num_devices(root->fs_info->super_copy, num_devices); in btrfs_rm_device()
1861 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_rm_device()
1865 fs_devices = root->fs_info->fs_devices; in btrfs_rm_device()
1878 root->fs_info->num_tolerated_disk_barrier_failures = in btrfs_rm_device()
1879 btrfs_calc_num_tolerated_disk_barrier_failures(root->fs_info); in btrfs_rm_device()
1946 &root->fs_info->fs_devices->alloc_list); in btrfs_rm_device()
1953 void btrfs_rm_dev_replace_remove_srcdev(struct btrfs_fs_info *fs_info, in btrfs_rm_dev_replace_remove_srcdev() argument
1958 WARN_ON(!mutex_is_locked(&fs_info->fs_devices->device_list_mutex)); in btrfs_rm_dev_replace_remove_srcdev()
1984 void btrfs_rm_dev_replace_free_srcdev(struct btrfs_fs_info *fs_info, in btrfs_rm_dev_replace_free_srcdev() argument
2001 tmp_fs_devices = fs_info->fs_devices; in btrfs_rm_dev_replace_free_srcdev()
2015 void btrfs_destroy_dev_replace_tgtdev(struct btrfs_fs_info *fs_info, in btrfs_destroy_dev_replace_tgtdev() argument
2022 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_destroy_dev_replace_tgtdev()
2024 btrfs_sysfs_rm_device_link(fs_info->fs_devices, tgtdev); in btrfs_destroy_dev_replace_tgtdev()
2028 fs_info->fs_devices->open_devices--; in btrfs_destroy_dev_replace_tgtdev()
2030 fs_info->fs_devices->num_devices--; in btrfs_destroy_dev_replace_tgtdev()
2032 next_device = list_entry(fs_info->fs_devices->devices.next, in btrfs_destroy_dev_replace_tgtdev()
2034 if (tgtdev->bdev == fs_info->sb->s_bdev) in btrfs_destroy_dev_replace_tgtdev()
2035 fs_info->sb->s_bdev = next_device->bdev; in btrfs_destroy_dev_replace_tgtdev()
2036 if (tgtdev->bdev == fs_info->fs_devices->latest_bdev) in btrfs_destroy_dev_replace_tgtdev()
2037 fs_info->fs_devices->latest_bdev = next_device->bdev; in btrfs_destroy_dev_replace_tgtdev()
2042 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_destroy_dev_replace_tgtdev()
2058 root->fs_info->bdev_holder, 0, &bdev, &bh); in btrfs_find_device_by_path()
2064 *device = btrfs_find_device(root->fs_info, devid, dev_uuid, in btrfs_find_device_by_path()
2082 devices = &root->fs_info->fs_devices->devices; in btrfs_find_device_missing_or_by_path()
2108 struct btrfs_fs_devices *fs_devices = root->fs_info->fs_devices; in btrfs_prepare_sprout()
2111 struct btrfs_super_block *disk_super = root->fs_info->super_copy; in btrfs_prepare_sprout()
2137 mutex_lock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_prepare_sprout()
2155 memcpy(root->fs_info->fsid, fs_devices->fsid, BTRFS_FSID_SIZE); in btrfs_prepare_sprout()
2157 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_prepare_sprout()
2186 root = root->fs_info->chunk_root; in btrfs_finish_sprout()
2222 device = btrfs_find_device(root->fs_info, devid, dev_uuid, in btrfs_finish_sprout()
2248 struct super_block *sb = root->fs_info->sb; in btrfs_init_new_device()
2254 if ((sb->s_flags & MS_RDONLY) && !root->fs_info->fs_devices->seeding) in btrfs_init_new_device()
2258 root->fs_info->bdev_holder); in btrfs_init_new_device()
2262 if (root->fs_info->fs_devices->seeding) { in btrfs_init_new_device()
2270 devices = &root->fs_info->fs_devices->devices; in btrfs_init_new_device()
2272 mutex_lock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2277 &root->fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2281 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2283 device = btrfs_alloc_device(root->fs_info, NULL, NULL); in btrfs_init_new_device()
2317 device->dev_root = root->fs_info->dev_root; in btrfs_init_new_device()
2331 device->fs_devices = root->fs_info->fs_devices; in btrfs_init_new_device()
2333 mutex_lock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2335 list_add_rcu(&device->dev_list, &root->fs_info->fs_devices->devices); in btrfs_init_new_device()
2337 &root->fs_info->fs_devices->alloc_list); in btrfs_init_new_device()
2338 root->fs_info->fs_devices->num_devices++; in btrfs_init_new_device()
2339 root->fs_info->fs_devices->open_devices++; in btrfs_init_new_device()
2340 root->fs_info->fs_devices->rw_devices++; in btrfs_init_new_device()
2341 root->fs_info->fs_devices->total_devices++; in btrfs_init_new_device()
2342 root->fs_info->fs_devices->total_rw_bytes += device->total_bytes; in btrfs_init_new_device()
2344 spin_lock(&root->fs_info->free_chunk_lock); in btrfs_init_new_device()
2345 root->fs_info->free_chunk_space += device->total_bytes; in btrfs_init_new_device()
2346 spin_unlock(&root->fs_info->free_chunk_lock); in btrfs_init_new_device()
2349 root->fs_info->fs_devices->rotating = 1; in btrfs_init_new_device()
2351 tmp = btrfs_super_total_bytes(root->fs_info->super_copy); in btrfs_init_new_device()
2352 btrfs_set_super_total_bytes(root->fs_info->super_copy, in btrfs_init_new_device()
2355 tmp = btrfs_super_num_devices(root->fs_info->super_copy); in btrfs_init_new_device()
2356 btrfs_set_super_num_devices(root->fs_info->super_copy, in btrfs_init_new_device()
2360 btrfs_sysfs_add_device_link(root->fs_info->fs_devices, device); in btrfs_init_new_device()
2366 btrfs_clear_space_info_full(root->fs_info); in btrfs_init_new_device()
2369 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2400 root->fs_info->fsid); in btrfs_init_new_device()
2401 if (kobject_rename(&root->fs_info->fs_devices->fsid_kobj, in btrfs_init_new_device()
2403 btrfs_warn(root->fs_info, in btrfs_init_new_device()
2407 root->fs_info->num_tolerated_disk_barrier_failures = in btrfs_init_new_device()
2408 btrfs_calc_num_tolerated_disk_barrier_failures(root->fs_info); in btrfs_init_new_device()
2420 btrfs_std_error(root->fs_info, ret, in btrfs_init_new_device()
2440 btrfs_sysfs_rm_device_link(root->fs_info->fs_devices, device); in btrfs_init_new_device()
2458 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_init_dev_replace_tgtdev() local
2465 if (fs_info->fs_devices->seeding) { in btrfs_init_dev_replace_tgtdev()
2466 btrfs_err(fs_info, "the filesystem is a seed filesystem!"); in btrfs_init_dev_replace_tgtdev()
2471 fs_info->bdev_holder); in btrfs_init_dev_replace_tgtdev()
2473 btrfs_err(fs_info, "target device %s is invalid!", device_path); in btrfs_init_dev_replace_tgtdev()
2479 devices = &fs_info->fs_devices->devices; in btrfs_init_dev_replace_tgtdev()
2482 btrfs_err(fs_info, "target device is in the filesystem!"); in btrfs_init_dev_replace_tgtdev()
2491 btrfs_err(fs_info, "target device is smaller than source device!"); in btrfs_init_dev_replace_tgtdev()
2514 mutex_lock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_init_dev_replace_tgtdev()
2526 device->dev_root = fs_info->dev_root; in btrfs_init_dev_replace_tgtdev()
2533 device->fs_devices = fs_info->fs_devices; in btrfs_init_dev_replace_tgtdev()
2534 list_add(&device->dev_list, &fs_info->fs_devices->devices); in btrfs_init_dev_replace_tgtdev()
2535 fs_info->fs_devices->num_devices++; in btrfs_init_dev_replace_tgtdev()
2536 fs_info->fs_devices->open_devices++; in btrfs_init_dev_replace_tgtdev()
2537 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_init_dev_replace_tgtdev()
2547 void btrfs_init_dev_replace_tgtdev_for_resume(struct btrfs_fs_info *fs_info, in btrfs_init_dev_replace_tgtdev_for_resume() argument
2550 WARN_ON(fs_info->fs_devices->rw_devices == 0); in btrfs_init_dev_replace_tgtdev_for_resume()
2551 tgtdev->io_width = fs_info->dev_root->sectorsize; in btrfs_init_dev_replace_tgtdev_for_resume()
2552 tgtdev->io_align = fs_info->dev_root->sectorsize; in btrfs_init_dev_replace_tgtdev_for_resume()
2553 tgtdev->sector_size = fs_info->dev_root->sectorsize; in btrfs_init_dev_replace_tgtdev_for_resume()
2554 tgtdev->dev_root = fs_info->dev_root; in btrfs_init_dev_replace_tgtdev_for_resume()
2568 root = device->dev_root->fs_info->chunk_root; in btrfs_update_device()
2610 device->dev_root->fs_info->super_copy; in btrfs_grow_device()
2628 fs_devices = device->dev_root->fs_info->fs_devices; in btrfs_grow_device()
2635 btrfs_clear_space_info_full(device->dev_root->fs_info); in btrfs_grow_device()
2652 root = root->fs_info->chunk_root; in btrfs_free_chunk()
2665 btrfs_std_error(root->fs_info, -ENOENT, in btrfs_free_chunk()
2673 btrfs_std_error(root->fs_info, ret, in btrfs_free_chunk()
2683 struct btrfs_super_block *super_copy = root->fs_info->super_copy; in btrfs_del_sys_chunk()
2733 struct btrfs_root *extent_root = root->fs_info->extent_root; in btrfs_remove_chunk()
2740 root = root->fs_info->chunk_root; in btrfs_remove_chunk()
2741 em_tree = &root->fs_info->mapping_tree.map_tree; in btrfs_remove_chunk()
2760 lock_chunks(root->fs_info->chunk_root); in btrfs_remove_chunk()
2762 unlock_chunks(root->fs_info->chunk_root); in btrfs_remove_chunk()
2778 spin_lock(&root->fs_info->free_chunk_lock); in btrfs_remove_chunk()
2779 root->fs_info->free_chunk_space += dev_extent_len; in btrfs_remove_chunk()
2780 spin_unlock(&root->fs_info->free_chunk_lock); in btrfs_remove_chunk()
2781 btrfs_clear_space_info_full(root->fs_info); in btrfs_remove_chunk()
2827 root = root->fs_info->chunk_root; in btrfs_relocate_chunk()
2828 extent_root = root->fs_info->extent_root; in btrfs_relocate_chunk()
2842 ASSERT(mutex_is_locked(&root->fs_info->delete_unused_bgs_mutex)); in btrfs_relocate_chunk()
2855 trans = btrfs_start_trans_remove_block_group(root->fs_info, in btrfs_relocate_chunk()
2859 btrfs_std_error(root->fs_info, ret, NULL); in btrfs_relocate_chunk()
2874 struct btrfs_root *chunk_root = root->fs_info->chunk_root; in btrfs_relocate_sys_chunks()
2895 mutex_lock(&root->fs_info->delete_unused_bgs_mutex); in btrfs_relocate_sys_chunks()
2898 mutex_unlock(&root->fs_info->delete_unused_bgs_mutex); in btrfs_relocate_sys_chunks()
2906 mutex_unlock(&root->fs_info->delete_unused_bgs_mutex); in btrfs_relocate_sys_chunks()
2928 mutex_unlock(&root->fs_info->delete_unused_bgs_mutex); in btrfs_relocate_sys_chunks()
3088 struct btrfs_fs_info *fs_info = bctl->fs_info; in set_balance_control() local
3090 BUG_ON(fs_info->balance_ctl); in set_balance_control()
3092 spin_lock(&fs_info->balance_lock); in set_balance_control()
3093 fs_info->balance_ctl = bctl; in set_balance_control()
3094 spin_unlock(&fs_info->balance_lock); in set_balance_control()
3097 static void unset_balance_control(struct btrfs_fs_info *fs_info) in unset_balance_control() argument
3099 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in unset_balance_control()
3101 BUG_ON(!fs_info->balance_ctl); in unset_balance_control()
3103 spin_lock(&fs_info->balance_lock); in unset_balance_control()
3104 fs_info->balance_ctl = NULL; in unset_balance_control()
3105 spin_unlock(&fs_info->balance_lock); in unset_balance_control()
3126 static int chunk_usage_range_filter(struct btrfs_fs_info *fs_info, u64 chunk_offset, in chunk_usage_range_filter() argument
3135 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in chunk_usage_range_filter()
3159 static int chunk_usage_filter(struct btrfs_fs_info *fs_info, in chunk_usage_filter() argument
3166 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in chunk_usage_filter()
3291 struct btrfs_balance_control *bctl = root->fs_info->balance_ctl; in should_balance_chunk()
3316 chunk_usage_filter(bctl->fs_info, chunk_offset, bargs)) { in should_balance_chunk()
3319 chunk_usage_range_filter(bctl->fs_info, chunk_offset, bargs)) { in should_balance_chunk()
3376 static int __btrfs_balance(struct btrfs_fs_info *fs_info) in __btrfs_balance() argument
3378 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in __btrfs_balance()
3379 struct btrfs_root *chunk_root = fs_info->chunk_root; in __btrfs_balance()
3380 struct btrfs_root *dev_root = fs_info->dev_root; in __btrfs_balance()
3406 devices = &fs_info->fs_devices->devices; in __btrfs_balance()
3439 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3441 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3457 if ((!counting && atomic_read(&fs_info->balance_pause_req)) || in __btrfs_balance()
3458 atomic_read(&fs_info->balance_cancel_req)) { in __btrfs_balance()
3463 mutex_lock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3466 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3480 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3490 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3498 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3500 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3508 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3513 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3514 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3516 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3538 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3545 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3554 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3562 mutex_unlock(&fs_info->delete_unused_bgs_mutex); in __btrfs_balance()
3568 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3570 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3586 btrfs_info(fs_info, "%d enospc errors during balance", in __btrfs_balance()
3619 static inline int balance_need_close(struct btrfs_fs_info *fs_info) in balance_need_close() argument
3622 return atomic_read(&fs_info->balance_cancel_req) || in balance_need_close()
3623 (atomic_read(&fs_info->balance_pause_req) == 0 && in balance_need_close()
3624 atomic_read(&fs_info->balance_cancel_req) == 0); in balance_need_close()
3627 static void __cancel_balance(struct btrfs_fs_info *fs_info) in __cancel_balance() argument
3631 unset_balance_control(fs_info); in __cancel_balance()
3632 ret = del_balance_item(fs_info->tree_root); in __cancel_balance()
3634 btrfs_std_error(fs_info, ret, NULL); in __cancel_balance()
3636 atomic_set(&fs_info->mutually_exclusive_operation_running, 0); in __cancel_balance()
3654 struct btrfs_fs_info *fs_info = bctl->fs_info; in btrfs_balance() local
3661 if (btrfs_fs_closing(fs_info) || in btrfs_balance()
3662 atomic_read(&fs_info->balance_pause_req) || in btrfs_balance()
3663 atomic_read(&fs_info->balance_cancel_req)) { in btrfs_balance()
3668 allowed = btrfs_super_incompat_flags(fs_info->super_copy); in btrfs_balance()
3681 btrfs_err(fs_info, "with mixed groups data and " in btrfs_balance()
3688 num_devices = fs_info->fs_devices->num_devices; in btrfs_balance()
3689 btrfs_dev_replace_lock(&fs_info->dev_replace); in btrfs_balance()
3690 if (btrfs_dev_replace_is_ongoing(&fs_info->dev_replace)) { in btrfs_balance()
3694 btrfs_dev_replace_unlock(&fs_info->dev_replace); in btrfs_balance()
3706 btrfs_err(fs_info, "unable to start balance with target " in btrfs_balance()
3713 btrfs_err(fs_info, in btrfs_balance()
3720 btrfs_err(fs_info, in btrfs_balance()
3730 btrfs_err(fs_info, "dup for data is not allowed"); in btrfs_balance()
3741 seq = read_seqbegin(&fs_info->profiles_lock); in btrfs_balance()
3744 (fs_info->avail_system_alloc_bits & allowed) && in btrfs_balance()
3747 (fs_info->avail_metadata_alloc_bits & allowed) && in btrfs_balance()
3750 btrfs_info(fs_info, "force reducing metadata integrity"); in btrfs_balance()
3752 btrfs_err(fs_info, "balance will reduce metadata " in btrfs_balance()
3758 } while (read_seqretry(&fs_info->profiles_lock, seq)); in btrfs_balance()
3761 fs_info->num_tolerated_disk_barrier_failures = min( in btrfs_balance()
3762 btrfs_calc_num_tolerated_disk_barrier_failures(fs_info), in btrfs_balance()
3767 ret = insert_balance_item(fs_info->tree_root, bctl); in btrfs_balance()
3776 spin_lock(&fs_info->balance_lock); in btrfs_balance()
3778 spin_unlock(&fs_info->balance_lock); in btrfs_balance()
3781 atomic_inc(&fs_info->balance_running); in btrfs_balance()
3782 mutex_unlock(&fs_info->balance_mutex); in btrfs_balance()
3784 ret = __btrfs_balance(fs_info); in btrfs_balance()
3786 mutex_lock(&fs_info->balance_mutex); in btrfs_balance()
3787 atomic_dec(&fs_info->balance_running); in btrfs_balance()
3790 fs_info->num_tolerated_disk_barrier_failures = in btrfs_balance()
3791 btrfs_calc_num_tolerated_disk_barrier_failures(fs_info); in btrfs_balance()
3796 update_ioctl_balance_args(fs_info, 0, bargs); in btrfs_balance()
3800 balance_need_close(fs_info)) { in btrfs_balance()
3801 __cancel_balance(fs_info); in btrfs_balance()
3804 wake_up(&fs_info->balance_wait_q); in btrfs_balance()
3809 __cancel_balance(fs_info); in btrfs_balance()
3812 atomic_set(&fs_info->mutually_exclusive_operation_running, 0); in btrfs_balance()
3819 struct btrfs_fs_info *fs_info = data; in balance_kthread() local
3822 mutex_lock(&fs_info->volume_mutex); in balance_kthread()
3823 mutex_lock(&fs_info->balance_mutex); in balance_kthread()
3825 if (fs_info->balance_ctl) { in balance_kthread()
3826 btrfs_info(fs_info, "continuing balance"); in balance_kthread()
3827 ret = btrfs_balance(fs_info->balance_ctl, NULL); in balance_kthread()
3830 mutex_unlock(&fs_info->balance_mutex); in balance_kthread()
3831 mutex_unlock(&fs_info->volume_mutex); in balance_kthread()
3836 int btrfs_resume_balance_async(struct btrfs_fs_info *fs_info) in btrfs_resume_balance_async() argument
3840 spin_lock(&fs_info->balance_lock); in btrfs_resume_balance_async()
3841 if (!fs_info->balance_ctl) { in btrfs_resume_balance_async()
3842 spin_unlock(&fs_info->balance_lock); in btrfs_resume_balance_async()
3845 spin_unlock(&fs_info->balance_lock); in btrfs_resume_balance_async()
3847 if (btrfs_test_opt(fs_info->tree_root, SKIP_BALANCE)) { in btrfs_resume_balance_async()
3848 btrfs_info(fs_info, "force skipping balance"); in btrfs_resume_balance_async()
3852 tsk = kthread_run(balance_kthread, fs_info, "btrfs-balance"); in btrfs_resume_balance_async()
3856 int btrfs_recover_balance(struct btrfs_fs_info *fs_info) in btrfs_recover_balance() argument
3874 ret = btrfs_search_slot(NULL, fs_info->tree_root, &key, path, 0, 0); in btrfs_recover_balance()
3891 bctl->fs_info = fs_info; in btrfs_recover_balance()
3902 WARN_ON(atomic_xchg(&fs_info->mutually_exclusive_operation_running, 1)); in btrfs_recover_balance()
3904 mutex_lock(&fs_info->volume_mutex); in btrfs_recover_balance()
3905 mutex_lock(&fs_info->balance_mutex); in btrfs_recover_balance()
3909 mutex_unlock(&fs_info->balance_mutex); in btrfs_recover_balance()
3910 mutex_unlock(&fs_info->volume_mutex); in btrfs_recover_balance()
3916 int btrfs_pause_balance(struct btrfs_fs_info *fs_info) in btrfs_pause_balance() argument
3920 mutex_lock(&fs_info->balance_mutex); in btrfs_pause_balance()
3921 if (!fs_info->balance_ctl) { in btrfs_pause_balance()
3922 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
3926 if (atomic_read(&fs_info->balance_running)) { in btrfs_pause_balance()
3927 atomic_inc(&fs_info->balance_pause_req); in btrfs_pause_balance()
3928 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
3930 wait_event(fs_info->balance_wait_q, in btrfs_pause_balance()
3931 atomic_read(&fs_info->balance_running) == 0); in btrfs_pause_balance()
3933 mutex_lock(&fs_info->balance_mutex); in btrfs_pause_balance()
3935 BUG_ON(atomic_read(&fs_info->balance_running)); in btrfs_pause_balance()
3936 atomic_dec(&fs_info->balance_pause_req); in btrfs_pause_balance()
3941 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
3945 int btrfs_cancel_balance(struct btrfs_fs_info *fs_info) in btrfs_cancel_balance() argument
3947 if (fs_info->sb->s_flags & MS_RDONLY) in btrfs_cancel_balance()
3950 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
3951 if (!fs_info->balance_ctl) { in btrfs_cancel_balance()
3952 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
3956 atomic_inc(&fs_info->balance_cancel_req); in btrfs_cancel_balance()
3961 if (atomic_read(&fs_info->balance_running)) { in btrfs_cancel_balance()
3962 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
3963 wait_event(fs_info->balance_wait_q, in btrfs_cancel_balance()
3964 atomic_read(&fs_info->balance_running) == 0); in btrfs_cancel_balance()
3965 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
3968 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
3969 mutex_lock(&fs_info->volume_mutex); in btrfs_cancel_balance()
3970 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
3972 if (fs_info->balance_ctl) in btrfs_cancel_balance()
3973 __cancel_balance(fs_info); in btrfs_cancel_balance()
3975 mutex_unlock(&fs_info->volume_mutex); in btrfs_cancel_balance()
3978 BUG_ON(fs_info->balance_ctl || atomic_read(&fs_info->balance_running)); in btrfs_cancel_balance()
3979 atomic_dec(&fs_info->balance_cancel_req); in btrfs_cancel_balance()
3980 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
3986 struct btrfs_fs_info *fs_info = data; in btrfs_uuid_scan_kthread() local
3987 struct btrfs_root *root = fs_info->tree_root; in btrfs_uuid_scan_kthread()
4048 trans = btrfs_start_transaction(fs_info->uuid_root, 2); in btrfs_uuid_scan_kthread()
4059 ret = btrfs_uuid_tree_add(trans, fs_info->uuid_root, in btrfs_uuid_scan_kthread()
4064 btrfs_warn(fs_info, "uuid_tree_add failed %d", in btrfs_uuid_scan_kthread()
4071 ret = btrfs_uuid_tree_add(trans, fs_info->uuid_root, in btrfs_uuid_scan_kthread()
4076 btrfs_warn(fs_info, "uuid_tree_add failed %d", in btrfs_uuid_scan_kthread()
4084 ret = btrfs_end_transaction(trans, fs_info->uuid_root); in btrfs_uuid_scan_kthread()
4109 btrfs_end_transaction(trans, fs_info->uuid_root); in btrfs_uuid_scan_kthread()
4111 btrfs_warn(fs_info, "btrfs_uuid_scan_kthread failed %d", ret); in btrfs_uuid_scan_kthread()
4113 fs_info->update_uuid_tree_gen = 1; in btrfs_uuid_scan_kthread()
4114 up(&fs_info->uuid_tree_rescan_sem); in btrfs_uuid_scan_kthread()
4125 static int btrfs_check_uuid_tree_entry(struct btrfs_fs_info *fs_info, in btrfs_check_uuid_tree_entry() argument
4139 subvol_root = btrfs_read_fs_root_no_name(fs_info, &key); in btrfs_check_uuid_tree_entry()
4165 struct btrfs_fs_info *fs_info = (struct btrfs_fs_info *)data; in btrfs_uuid_rescan_kthread() local
4173 ret = btrfs_uuid_tree_iterate(fs_info, btrfs_check_uuid_tree_entry); in btrfs_uuid_rescan_kthread()
4175 btrfs_warn(fs_info, "iterating uuid_tree failed %d", ret); in btrfs_uuid_rescan_kthread()
4176 up(&fs_info->uuid_tree_rescan_sem); in btrfs_uuid_rescan_kthread()
4182 int btrfs_create_uuid_tree(struct btrfs_fs_info *fs_info) in btrfs_create_uuid_tree() argument
4185 struct btrfs_root *tree_root = fs_info->tree_root; in btrfs_create_uuid_tree()
4198 uuid_root = btrfs_create_tree(trans, fs_info, in btrfs_create_uuid_tree()
4206 fs_info->uuid_root = uuid_root; in btrfs_create_uuid_tree()
4212 down(&fs_info->uuid_tree_rescan_sem); in btrfs_create_uuid_tree()
4213 task = kthread_run(btrfs_uuid_scan_kthread, fs_info, "btrfs-uuid"); in btrfs_create_uuid_tree()
4216 btrfs_warn(fs_info, "failed to start uuid_scan task"); in btrfs_create_uuid_tree()
4217 up(&fs_info->uuid_tree_rescan_sem); in btrfs_create_uuid_tree()
4224 int btrfs_check_uuid_tree(struct btrfs_fs_info *fs_info) in btrfs_check_uuid_tree() argument
4228 down(&fs_info->uuid_tree_rescan_sem); in btrfs_check_uuid_tree()
4229 task = kthread_run(btrfs_uuid_rescan_kthread, fs_info, "btrfs-uuid"); in btrfs_check_uuid_tree()
4232 btrfs_warn(fs_info, "failed to start uuid_rescan task"); in btrfs_check_uuid_tree()
4233 up(&fs_info->uuid_tree_rescan_sem); in btrfs_check_uuid_tree()
4260 struct btrfs_super_block *super_copy = root->fs_info->super_copy; in btrfs_shrink_device()
4279 spin_lock(&root->fs_info->free_chunk_lock); in btrfs_shrink_device()
4280 root->fs_info->free_chunk_space -= diff; in btrfs_shrink_device()
4281 spin_unlock(&root->fs_info->free_chunk_lock); in btrfs_shrink_device()
4291 mutex_lock(&root->fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4294 mutex_unlock(&root->fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4300 mutex_unlock(&root->fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4314 mutex_unlock(&root->fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4323 mutex_unlock(&root->fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4332 mutex_unlock(&root->fs_info->delete_unused_bgs_mutex); in btrfs_shrink_device()
4389 &root->fs_info->fs_devices->resized_devices); in btrfs_shrink_device()
4405 spin_lock(&root->fs_info->free_chunk_lock); in btrfs_shrink_device()
4406 root->fs_info->free_chunk_space += diff; in btrfs_shrink_device()
4407 spin_unlock(&root->fs_info->free_chunk_lock); in btrfs_shrink_device()
4417 struct btrfs_super_block *super_copy = root->fs_info->super_copy; in btrfs_add_system_chunk()
4489 struct btrfs_fs_info *info = extent_root->fs_info; in __btrfs_alloc_chunk()
4730 em_tree = &extent_root->fs_info->mapping_tree.map_tree; in __btrfs_alloc_chunk()
4754 spin_lock(&extent_root->fs_info->free_chunk_lock); in __btrfs_alloc_chunk()
4755 extent_root->fs_info->free_chunk_space -= (stripe_size * in __btrfs_alloc_chunk()
4757 spin_unlock(&extent_root->fs_info->free_chunk_lock); in __btrfs_alloc_chunk()
4760 check_raid56_incompat_flag(extent_root->fs_info, type); in __btrfs_alloc_chunk()
4786 struct btrfs_root *chunk_root = extent_root->fs_info->chunk_root; in btrfs_finish_chunk_alloc()
4799 em_tree = &extent_root->fs_info->mapping_tree.map_tree; in btrfs_finish_chunk_alloc()
4805 btrfs_crit(extent_root->fs_info, "unable to find logical " in btrfs_finish_chunk_alloc()
4811 btrfs_crit(extent_root->fs_info, "found a bad mapping, wanted" in btrfs_finish_chunk_alloc()
4897 ASSERT(mutex_is_locked(&extent_root->fs_info->chunk_mutex)); in btrfs_alloc_chunk()
4898 chunk_offset = find_next_chunk(extent_root->fs_info); in btrfs_alloc_chunk()
4909 struct btrfs_fs_info *fs_info = root->fs_info; in init_first_rw_device() local
4910 struct btrfs_root *extent_root = fs_info->extent_root; in init_first_rw_device()
4913 chunk_offset = find_next_chunk(fs_info); in init_first_rw_device()
4920 sys_chunk_offset = find_next_chunk(root->fs_info); in init_first_rw_device()
4921 alloc_profile = btrfs_get_alloc_profile(fs_info->chunk_root, 0); in init_first_rw_device()
4949 struct btrfs_mapping_tree *map_tree = &root->fs_info->mapping_tree; in btrfs_chunk_readonly()
5009 int btrfs_num_copies(struct btrfs_fs_info *fs_info, u64 logical, u64 len) in btrfs_num_copies() argument
5011 struct btrfs_mapping_tree *map_tree = &fs_info->mapping_tree; in btrfs_num_copies()
5027 btrfs_crit(fs_info, "No mapping for %Lu-%Lu", logical, in btrfs_num_copies()
5033 btrfs_crit(fs_info, "Invalid mapping for %Lu-%Lu, got " in btrfs_num_copies()
5053 btrfs_dev_replace_lock(&fs_info->dev_replace); in btrfs_num_copies()
5054 if (btrfs_dev_replace_is_ongoing(&fs_info->dev_replace)) in btrfs_num_copies()
5056 btrfs_dev_replace_unlock(&fs_info->dev_replace); in btrfs_num_copies()
5104 static int find_live_mirror(struct btrfs_fs_info *fs_info, in find_live_mirror() argument
5113 fs_info->dev_replace.cont_reading_from_srcdev_mode == in find_live_mirror()
5115 srcdev = fs_info->dev_replace.srcdev; in find_live_mirror()
5208 static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw, in __btrfs_map_block() argument
5215 struct btrfs_mapping_tree *map_tree = &fs_info->mapping_tree; in __btrfs_map_block()
5231 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in __btrfs_map_block()
5243 btrfs_crit(fs_info, "unable to find logical %llu len %llu", in __btrfs_map_block()
5249 btrfs_crit(fs_info, "found a bad mapping, wanted %Lu, " in __btrfs_map_block()
5344 ret = __btrfs_map_block(fs_info, REQ_GET_READ_MIRRORS, in __btrfs_map_block()
5425 stripe_index = find_live_mirror(fs_info, map, 0, in __btrfs_map_block()
5457 stripe_index = find_live_mirror(fs_info, map, in __btrfs_map_block()
5750 int btrfs_map_block(struct btrfs_fs_info *fs_info, int rw, in btrfs_map_block() argument
5754 return __btrfs_map_block(fs_info, rw, logical, length, bbio_ret, in btrfs_map_block()
5759 int btrfs_map_sblock(struct btrfs_fs_info *fs_info, int rw, in btrfs_map_sblock() argument
5764 return __btrfs_map_block(fs_info, rw, logical, length, bbio_ret, in btrfs_map_sblock()
5895 btrfs_bio_counter_dec(bbio->fs_info); in btrfs_end_bio()
5956 atomic_inc(&root->fs_info->nr_async_bios); in btrfs_schedule_bio()
5979 btrfs_queue_work(root->fs_info->submit_workers, in btrfs_schedule_bio()
6008 btrfs_bio_counter_inc_noblocked(root->fs_info); in submit_stripe_bio()
6046 btrfs_bio_counter_inc_blocked(root->fs_info); in btrfs_map_bio()
6047 ret = __btrfs_map_block(root->fs_info, rw, logical, &map_length, &bbio, in btrfs_map_bio()
6050 btrfs_bio_counter_dec(root->fs_info); in btrfs_map_bio()
6058 bbio->fs_info = root->fs_info; in btrfs_map_bio()
6071 btrfs_bio_counter_dec(root->fs_info); in btrfs_map_bio()
6076 btrfs_crit(root->fs_info, "mapping failed logical %llu bio len %llu len %llu", in btrfs_map_bio()
6098 btrfs_bio_counter_dec(root->fs_info); in btrfs_map_bio()
6102 struct btrfs_device *btrfs_find_device(struct btrfs_fs_info *fs_info, u64 devid, in btrfs_find_device() argument
6108 cur_devices = fs_info->fs_devices; in btrfs_find_device()
6155 struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info, in btrfs_alloc_device() argument
6162 if (WARN_ON(!devid && !fs_info)) in btrfs_alloc_device()
6174 ret = find_next_devid(fs_info, &tmp); in btrfs_alloc_device()
6197 struct btrfs_mapping_tree *map_tree = &root->fs_info->mapping_tree; in read_one_chunk()
6255 map->stripes[i].dev = btrfs_find_device(root->fs_info, devid, in read_one_chunk()
6263 add_missing_dev(root, root->fs_info->fs_devices, in read_one_chunk()
6269 btrfs_warn(root->fs_info, "devid %llu uuid %pU is missing", in read_one_chunk()
6315 fs_devices = root->fs_info->fs_devices->seed; in open_seed_devices()
6342 root->fs_info->bdev_holder); in open_seed_devices()
6356 fs_devices->seed = root->fs_info->fs_devices->seed; in open_seed_devices()
6357 root->fs_info->fs_devices->seed = fs_devices; in open_seed_devices()
6366 struct btrfs_fs_devices *fs_devices = root->fs_info->fs_devices; in read_one_dev()
6379 if (memcmp(fs_uuid, root->fs_info->fsid, BTRFS_UUID_SIZE)) { in read_one_dev()
6385 device = btrfs_find_device(root->fs_info, devid, dev_uuid, fs_uuid); in read_one_dev()
6393 btrfs_warn(root->fs_info, "devid %llu uuid %pU missing", in read_one_dev()
6425 if (device->fs_devices != root->fs_info->fs_devices) { in read_one_dev()
6436 spin_lock(&root->fs_info->free_chunk_lock); in read_one_dev()
6437 root->fs_info->free_chunk_space += device->total_bytes - in read_one_dev()
6439 spin_unlock(&root->fs_info->free_chunk_lock); in read_one_dev()
6447 struct btrfs_super_block *super_copy = root->fs_info->super_copy; in btrfs_read_sys_array()
6558 root = root->fs_info->chunk_root; in btrfs_read_chunk_tree()
6616 void btrfs_init_devices_late(struct btrfs_fs_info *fs_info) in btrfs_init_devices_late() argument
6618 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_devices_late()
6624 device->dev_root = fs_info->dev_root; in btrfs_init_devices_late()
6639 int btrfs_init_dev_stats(struct btrfs_fs_info *fs_info) in btrfs_init_dev_stats() argument
6643 struct btrfs_root *dev_root = fs_info->dev_root; in btrfs_init_dev_stats()
6644 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_dev_stats()
6719 btrfs_warn_in_rcu(dev_root->fs_info, in update_dev_stat_item()
6730 btrfs_warn_in_rcu(dev_root->fs_info, in update_dev_stat_item()
6744 btrfs_warn_in_rcu(dev_root->fs_info, in update_dev_stat_item()
6767 struct btrfs_fs_info *fs_info) in btrfs_run_dev_stats() argument
6769 struct btrfs_root *dev_root = fs_info->dev_root; in btrfs_run_dev_stats()
6770 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_run_dev_stats()
6800 btrfs_err_rl_in_rcu(dev->dev_root->fs_info, in btrfs_dev_stat_print_on_error()
6820 btrfs_info_in_rcu(dev->dev_root->fs_info, in btrfs_dev_stat_print_on_load()
6834 struct btrfs_fs_devices *fs_devices = root->fs_info->fs_devices; in btrfs_get_dev_stats()
6838 dev = btrfs_find_device(root->fs_info, stats->devid, NULL, NULL); in btrfs_get_dev_stats()
6842 btrfs_warn(root->fs_info, "get dev_stats failed, device not found"); in btrfs_get_dev_stats()
6845 btrfs_warn(root->fs_info, "get dev_stats failed, not yet valid"); in btrfs_get_dev_stats()
6899 void btrfs_update_commit_device_size(struct btrfs_fs_info *fs_info) in btrfs_update_commit_device_size() argument
6901 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_update_commit_device_size()
6908 lock_chunks(fs_info->dev_root); in btrfs_update_commit_device_size()
6914 unlock_chunks(fs_info->dev_root); in btrfs_update_commit_device_size()
6943 void btrfs_set_fs_info_ptr(struct btrfs_fs_info *fs_info) in btrfs_set_fs_info_ptr() argument
6945 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_set_fs_info_ptr()
6947 fs_devices->fs_info = fs_info; in btrfs_set_fs_info_ptr()
6952 void btrfs_reset_fs_info_ptr(struct btrfs_fs_info *fs_info) in btrfs_reset_fs_info_ptr() argument
6954 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_reset_fs_info_ptr()
6956 fs_devices->fs_info = NULL; in btrfs_reset_fs_info_ptr()