Lines Matching refs:fs_info

254 	struct btrfs_fs_info *fs_info;  in run_scheduled_bios()  local
276 fs_info = device->dev_root->fs_info; in run_scheduled_bios()
277 limit = btrfs_async_submit_limit(fs_info); in run_scheduled_bios()
345 if (atomic_dec_return(&fs_info->nr_async_bios) < limit && in run_scheduled_bios()
346 waitqueue_active(&fs_info->async_submit_wait)) in run_scheduled_bios()
347 wake_up(&fs_info->async_submit_wait); in run_scheduled_bios()
379 fs_info->fs_devices->open_devices > 1) { in run_scheduled_bios()
412 btrfs_queue_work(fs_info->submit_workers, in run_scheduled_bios()
1083 search_list = &trans->root->fs_info->pinned_chunks; in contains_pending_extent()
1134 search_start = max(root->fs_info->alloc_start, 1024ull * 1024); in find_free_dev_extent()
1311 btrfs_error(root->fs_info, ret, "Slot search failed"); in btrfs_free_dev_extent()
1319 btrfs_error(root->fs_info, ret, in btrfs_free_dev_extent()
1362 write_extent_buffer(leaf, root->fs_info->chunk_tree_uuid, in btrfs_alloc_dev_extent()
1372 static u64 find_next_chunk(struct btrfs_fs_info *fs_info) in find_next_chunk() argument
1379 em_tree = &fs_info->mapping_tree.map_tree; in find_next_chunk()
1391 static noinline int find_next_devid(struct btrfs_fs_info *fs_info, in find_next_devid() argument
1407 ret = btrfs_search_slot(NULL, fs_info->chunk_root, &key, path, 0, 0); in find_next_devid()
1413 ret = btrfs_previous_item(fs_info->chunk_root, path, in find_next_devid()
1444 root = root->fs_info->chunk_root; in btrfs_add_device()
1480 write_extent_buffer(leaf, root->fs_info->fsid, ptr, BTRFS_UUID_SIZE); in btrfs_add_device()
1513 root = root->fs_info->chunk_root; in btrfs_rm_dev_item()
1565 seq = read_seqbegin(&root->fs_info->profiles_lock); in btrfs_rm_device()
1567 all_avail = root->fs_info->avail_data_alloc_bits | in btrfs_rm_device()
1568 root->fs_info->avail_system_alloc_bits | in btrfs_rm_device()
1569 root->fs_info->avail_metadata_alloc_bits; in btrfs_rm_device()
1570 } while (read_seqretry(&root->fs_info->profiles_lock, seq)); in btrfs_rm_device()
1572 num_devices = root->fs_info->fs_devices->num_devices; in btrfs_rm_device()
1573 btrfs_dev_replace_lock(&root->fs_info->dev_replace); in btrfs_rm_device()
1574 if (btrfs_dev_replace_is_ongoing(&root->fs_info->dev_replace)) { in btrfs_rm_device()
1578 btrfs_dev_replace_unlock(&root->fs_info->dev_replace); in btrfs_rm_device()
1591 root->fs_info->fs_devices->rw_devices <= 2) { in btrfs_rm_device()
1596 root->fs_info->fs_devices->rw_devices <= 3) { in btrfs_rm_device()
1606 devices = &root->fs_info->fs_devices->devices; in btrfs_rm_device()
1629 root->fs_info->bdev_holder, 0, in btrfs_rm_device()
1636 device = btrfs_find_device(root->fs_info, devid, dev_uuid, in btrfs_rm_device()
1649 if (device->writeable && root->fs_info->fs_devices->rw_devices == 1) { in btrfs_rm_device()
1673 ret = btrfs_rm_dev_item(root->fs_info->chunk_root, device); in btrfs_rm_device()
1678 btrfs_scrub_cancel_dev(root->fs_info, device); in btrfs_rm_device()
1691 mutex_lock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_rm_device()
1700 next_device = list_entry(root->fs_info->fs_devices->devices.next, in btrfs_rm_device()
1702 if (device->bdev == root->fs_info->sb->s_bdev) in btrfs_rm_device()
1703 root->fs_info->sb->s_bdev = next_device->bdev; in btrfs_rm_device()
1704 if (device->bdev == root->fs_info->fs_devices->latest_bdev) in btrfs_rm_device()
1705 root->fs_info->fs_devices->latest_bdev = next_device->bdev; in btrfs_rm_device()
1710 btrfs_kobj_rm_device(root->fs_info, device); in btrfs_rm_device()
1715 num_devices = btrfs_super_num_devices(root->fs_info->super_copy) - 1; in btrfs_rm_device()
1716 btrfs_set_super_num_devices(root->fs_info->super_copy, num_devices); in btrfs_rm_device()
1717 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_rm_device()
1721 fs_devices = root->fs_info->fs_devices; in btrfs_rm_device()
1734 root->fs_info->num_tolerated_disk_barrier_failures = in btrfs_rm_device()
1735 btrfs_calc_num_tolerated_disk_barrier_failures(root->fs_info); in btrfs_rm_device()
1802 &root->fs_info->fs_devices->alloc_list); in btrfs_rm_device()
1809 void btrfs_rm_dev_replace_remove_srcdev(struct btrfs_fs_info *fs_info, in btrfs_rm_dev_replace_remove_srcdev() argument
1814 WARN_ON(!mutex_is_locked(&fs_info->fs_devices->device_list_mutex)); in btrfs_rm_dev_replace_remove_srcdev()
1840 void btrfs_rm_dev_replace_free_srcdev(struct btrfs_fs_info *fs_info, in btrfs_rm_dev_replace_free_srcdev() argument
1857 tmp_fs_devices = fs_info->fs_devices; in btrfs_rm_dev_replace_free_srcdev()
1871 void btrfs_destroy_dev_replace_tgtdev(struct btrfs_fs_info *fs_info, in btrfs_destroy_dev_replace_tgtdev() argument
1878 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_destroy_dev_replace_tgtdev()
1881 fs_info->fs_devices->open_devices--; in btrfs_destroy_dev_replace_tgtdev()
1883 fs_info->fs_devices->num_devices--; in btrfs_destroy_dev_replace_tgtdev()
1885 next_device = list_entry(fs_info->fs_devices->devices.next, in btrfs_destroy_dev_replace_tgtdev()
1887 if (tgtdev->bdev == fs_info->sb->s_bdev) in btrfs_destroy_dev_replace_tgtdev()
1888 fs_info->sb->s_bdev = next_device->bdev; in btrfs_destroy_dev_replace_tgtdev()
1889 if (tgtdev->bdev == fs_info->fs_devices->latest_bdev) in btrfs_destroy_dev_replace_tgtdev()
1890 fs_info->fs_devices->latest_bdev = next_device->bdev; in btrfs_destroy_dev_replace_tgtdev()
1895 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_destroy_dev_replace_tgtdev()
1911 root->fs_info->bdev_holder, 0, &bdev, &bh); in btrfs_find_device_by_path()
1917 *device = btrfs_find_device(root->fs_info, devid, dev_uuid, in btrfs_find_device_by_path()
1935 devices = &root->fs_info->fs_devices->devices; in btrfs_find_device_missing_or_by_path()
1948 btrfs_err(root->fs_info, "no missing device found"); in btrfs_find_device_missing_or_by_path()
1963 struct btrfs_fs_devices *fs_devices = root->fs_info->fs_devices; in btrfs_prepare_sprout()
1966 struct btrfs_super_block *disk_super = root->fs_info->super_copy; in btrfs_prepare_sprout()
1992 mutex_lock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_prepare_sprout()
2010 memcpy(root->fs_info->fsid, fs_devices->fsid, BTRFS_FSID_SIZE); in btrfs_prepare_sprout()
2012 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_prepare_sprout()
2041 root = root->fs_info->chunk_root; in btrfs_finish_sprout()
2077 device = btrfs_find_device(root->fs_info, devid, dev_uuid, in btrfs_finish_sprout()
2103 struct super_block *sb = root->fs_info->sb; in btrfs_init_new_device()
2109 if ((sb->s_flags & MS_RDONLY) && !root->fs_info->fs_devices->seeding) in btrfs_init_new_device()
2113 root->fs_info->bdev_holder); in btrfs_init_new_device()
2117 if (root->fs_info->fs_devices->seeding) { in btrfs_init_new_device()
2125 devices = &root->fs_info->fs_devices->devices; in btrfs_init_new_device()
2127 mutex_lock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2132 &root->fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2136 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2138 device = btrfs_alloc_device(root->fs_info, NULL, NULL); in btrfs_init_new_device()
2172 device->dev_root = root->fs_info->dev_root; in btrfs_init_new_device()
2186 device->fs_devices = root->fs_info->fs_devices; in btrfs_init_new_device()
2188 mutex_lock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2190 list_add_rcu(&device->dev_list, &root->fs_info->fs_devices->devices); in btrfs_init_new_device()
2192 &root->fs_info->fs_devices->alloc_list); in btrfs_init_new_device()
2193 root->fs_info->fs_devices->num_devices++; in btrfs_init_new_device()
2194 root->fs_info->fs_devices->open_devices++; in btrfs_init_new_device()
2195 root->fs_info->fs_devices->rw_devices++; in btrfs_init_new_device()
2196 root->fs_info->fs_devices->total_devices++; in btrfs_init_new_device()
2197 root->fs_info->fs_devices->total_rw_bytes += device->total_bytes; in btrfs_init_new_device()
2199 spin_lock(&root->fs_info->free_chunk_lock); in btrfs_init_new_device()
2200 root->fs_info->free_chunk_space += device->total_bytes; in btrfs_init_new_device()
2201 spin_unlock(&root->fs_info->free_chunk_lock); in btrfs_init_new_device()
2204 root->fs_info->fs_devices->rotating = 1; in btrfs_init_new_device()
2206 tmp = btrfs_super_total_bytes(root->fs_info->super_copy); in btrfs_init_new_device()
2207 btrfs_set_super_total_bytes(root->fs_info->super_copy, in btrfs_init_new_device()
2210 tmp = btrfs_super_num_devices(root->fs_info->super_copy); in btrfs_init_new_device()
2211 btrfs_set_super_num_devices(root->fs_info->super_copy, in btrfs_init_new_device()
2215 btrfs_kobj_add_device(root->fs_info, device); in btrfs_init_new_device()
2221 btrfs_clear_space_info_full(root->fs_info); in btrfs_init_new_device()
2224 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_init_new_device()
2255 root->fs_info->fsid); in btrfs_init_new_device()
2256 if (kobject_rename(&root->fs_info->super_kobj, fsid_buf)) in btrfs_init_new_device()
2260 root->fs_info->num_tolerated_disk_barrier_failures = in btrfs_init_new_device()
2261 btrfs_calc_num_tolerated_disk_barrier_failures(root->fs_info); in btrfs_init_new_device()
2273 btrfs_error(root->fs_info, ret, in btrfs_init_new_device()
2293 btrfs_kobj_rm_device(root->fs_info, device); in btrfs_init_new_device()
2311 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_init_dev_replace_tgtdev() local
2318 if (fs_info->fs_devices->seeding) { in btrfs_init_dev_replace_tgtdev()
2319 btrfs_err(fs_info, "the filesystem is a seed filesystem!"); in btrfs_init_dev_replace_tgtdev()
2324 fs_info->bdev_holder); in btrfs_init_dev_replace_tgtdev()
2326 btrfs_err(fs_info, "target device %s is invalid!", device_path); in btrfs_init_dev_replace_tgtdev()
2332 devices = &fs_info->fs_devices->devices; in btrfs_init_dev_replace_tgtdev()
2335 btrfs_err(fs_info, "target device is in the filesystem!"); in btrfs_init_dev_replace_tgtdev()
2344 btrfs_err(fs_info, "target device is smaller than source device!"); in btrfs_init_dev_replace_tgtdev()
2367 mutex_lock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_init_dev_replace_tgtdev()
2379 device->dev_root = fs_info->dev_root; in btrfs_init_dev_replace_tgtdev()
2386 device->fs_devices = fs_info->fs_devices; in btrfs_init_dev_replace_tgtdev()
2387 list_add(&device->dev_list, &fs_info->fs_devices->devices); in btrfs_init_dev_replace_tgtdev()
2388 fs_info->fs_devices->num_devices++; in btrfs_init_dev_replace_tgtdev()
2389 fs_info->fs_devices->open_devices++; in btrfs_init_dev_replace_tgtdev()
2390 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_init_dev_replace_tgtdev()
2400 void btrfs_init_dev_replace_tgtdev_for_resume(struct btrfs_fs_info *fs_info, in btrfs_init_dev_replace_tgtdev_for_resume() argument
2403 WARN_ON(fs_info->fs_devices->rw_devices == 0); in btrfs_init_dev_replace_tgtdev_for_resume()
2404 tgtdev->io_width = fs_info->dev_root->sectorsize; in btrfs_init_dev_replace_tgtdev_for_resume()
2405 tgtdev->io_align = fs_info->dev_root->sectorsize; in btrfs_init_dev_replace_tgtdev_for_resume()
2406 tgtdev->sector_size = fs_info->dev_root->sectorsize; in btrfs_init_dev_replace_tgtdev_for_resume()
2407 tgtdev->dev_root = fs_info->dev_root; in btrfs_init_dev_replace_tgtdev_for_resume()
2421 root = device->dev_root->fs_info->chunk_root; in btrfs_update_device()
2463 device->dev_root->fs_info->super_copy; in btrfs_grow_device()
2481 fs_devices = device->dev_root->fs_info->fs_devices; in btrfs_grow_device()
2488 btrfs_clear_space_info_full(device->dev_root->fs_info); in btrfs_grow_device()
2505 root = root->fs_info->chunk_root; in btrfs_free_chunk()
2518 btrfs_error(root->fs_info, -ENOENT, in btrfs_free_chunk()
2526 btrfs_error(root->fs_info, ret, in btrfs_free_chunk()
2536 struct btrfs_super_block *super_copy = root->fs_info->super_copy; in btrfs_del_sys_chunk()
2586 struct btrfs_root *extent_root = root->fs_info->extent_root; in btrfs_remove_chunk()
2593 root = root->fs_info->chunk_root; in btrfs_remove_chunk()
2594 em_tree = &root->fs_info->mapping_tree.map_tree; in btrfs_remove_chunk()
2628 spin_lock(&root->fs_info->free_chunk_lock); in btrfs_remove_chunk()
2629 root->fs_info->free_chunk_space += dev_extent_len; in btrfs_remove_chunk()
2630 spin_unlock(&root->fs_info->free_chunk_lock); in btrfs_remove_chunk()
2631 btrfs_clear_space_info_full(root->fs_info); in btrfs_remove_chunk()
2679 root = root->fs_info->chunk_root; in btrfs_relocate_chunk()
2680 extent_root = root->fs_info->extent_root; in btrfs_relocate_chunk()
2694 btrfs_std_error(root->fs_info, ret); in btrfs_relocate_chunk()
2709 struct btrfs_root *chunk_root = root->fs_info->chunk_root; in btrfs_relocate_sys_chunks()
2915 struct btrfs_fs_info *fs_info = bctl->fs_info; in set_balance_control() local
2917 BUG_ON(fs_info->balance_ctl); in set_balance_control()
2919 spin_lock(&fs_info->balance_lock); in set_balance_control()
2920 fs_info->balance_ctl = bctl; in set_balance_control()
2921 spin_unlock(&fs_info->balance_lock); in set_balance_control()
2924 static void unset_balance_control(struct btrfs_fs_info *fs_info) in unset_balance_control() argument
2926 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in unset_balance_control()
2928 BUG_ON(!fs_info->balance_ctl); in unset_balance_control()
2930 spin_lock(&fs_info->balance_lock); in unset_balance_control()
2931 fs_info->balance_ctl = NULL; in unset_balance_control()
2932 spin_unlock(&fs_info->balance_lock); in unset_balance_control()
2953 static int chunk_usage_filter(struct btrfs_fs_info *fs_info, u64 chunk_offset, in chunk_usage_filter() argument
2960 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in chunk_usage_filter()
3072 struct btrfs_balance_control *bctl = root->fs_info->balance_ctl; in should_balance_chunk()
3097 chunk_usage_filter(bctl->fs_info, chunk_offset, bargs)) { in should_balance_chunk()
3138 static int __btrfs_balance(struct btrfs_fs_info *fs_info) in __btrfs_balance() argument
3140 struct btrfs_balance_control *bctl = fs_info->balance_ctl; in __btrfs_balance()
3141 struct btrfs_root *chunk_root = fs_info->chunk_root; in __btrfs_balance()
3142 struct btrfs_root *dev_root = fs_info->dev_root; in __btrfs_balance()
3162 devices = &fs_info->fs_devices->devices; in __btrfs_balance()
3195 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3197 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3209 if ((!counting && atomic_read(&fs_info->balance_pause_req)) || in __btrfs_balance()
3210 atomic_read(&fs_info->balance_cancel_req)) { in __btrfs_balance()
3243 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3245 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3255 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3257 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3269 spin_lock(&fs_info->balance_lock); in __btrfs_balance()
3271 spin_unlock(&fs_info->balance_lock); in __btrfs_balance()
3287 btrfs_info(fs_info, "%d enospc errors during balance", in __btrfs_balance()
3320 static inline int balance_need_close(struct btrfs_fs_info *fs_info) in balance_need_close() argument
3323 return atomic_read(&fs_info->balance_cancel_req) || in balance_need_close()
3324 (atomic_read(&fs_info->balance_pause_req) == 0 && in balance_need_close()
3325 atomic_read(&fs_info->balance_cancel_req) == 0); in balance_need_close()
3328 static void __cancel_balance(struct btrfs_fs_info *fs_info) in __cancel_balance() argument
3332 unset_balance_control(fs_info); in __cancel_balance()
3333 ret = del_balance_item(fs_info->tree_root); in __cancel_balance()
3335 btrfs_std_error(fs_info, ret); in __cancel_balance()
3337 atomic_set(&fs_info->mutually_exclusive_operation_running, 0); in __cancel_balance()
3346 struct btrfs_fs_info *fs_info = bctl->fs_info; in btrfs_balance() local
3353 if (btrfs_fs_closing(fs_info) || in btrfs_balance()
3354 atomic_read(&fs_info->balance_pause_req) || in btrfs_balance()
3355 atomic_read(&fs_info->balance_cancel_req)) { in btrfs_balance()
3360 allowed = btrfs_super_incompat_flags(fs_info->super_copy); in btrfs_balance()
3373 btrfs_err(fs_info, "with mixed groups data and " in btrfs_balance()
3380 num_devices = fs_info->fs_devices->num_devices; in btrfs_balance()
3381 btrfs_dev_replace_lock(&fs_info->dev_replace); in btrfs_balance()
3382 if (btrfs_dev_replace_is_ongoing(&fs_info->dev_replace)) { in btrfs_balance()
3386 btrfs_dev_replace_unlock(&fs_info->dev_replace); in btrfs_balance()
3400 btrfs_err(fs_info, "unable to start balance with target " in btrfs_balance()
3409 btrfs_err(fs_info, in btrfs_balance()
3418 btrfs_err(fs_info, in btrfs_balance()
3428 btrfs_err(fs_info, "dup for data is not allowed"); in btrfs_balance()
3439 seq = read_seqbegin(&fs_info->profiles_lock); in btrfs_balance()
3442 (fs_info->avail_system_alloc_bits & allowed) && in btrfs_balance()
3445 (fs_info->avail_metadata_alloc_bits & allowed) && in btrfs_balance()
3448 btrfs_info(fs_info, "force reducing metadata integrity"); in btrfs_balance()
3450 btrfs_err(fs_info, "balance will reduce metadata " in btrfs_balance()
3456 } while (read_seqretry(&fs_info->profiles_lock, seq)); in btrfs_balance()
3463 btrfs_calc_num_tolerated_disk_barrier_failures(fs_info); in btrfs_balance()
3474 fs_info->num_tolerated_disk_barrier_failures = in btrfs_balance()
3478 ret = insert_balance_item(fs_info->tree_root, bctl); in btrfs_balance()
3487 spin_lock(&fs_info->balance_lock); in btrfs_balance()
3489 spin_unlock(&fs_info->balance_lock); in btrfs_balance()
3492 atomic_inc(&fs_info->balance_running); in btrfs_balance()
3493 mutex_unlock(&fs_info->balance_mutex); in btrfs_balance()
3495 ret = __btrfs_balance(fs_info); in btrfs_balance()
3497 mutex_lock(&fs_info->balance_mutex); in btrfs_balance()
3498 atomic_dec(&fs_info->balance_running); in btrfs_balance()
3501 fs_info->num_tolerated_disk_barrier_failures = in btrfs_balance()
3502 btrfs_calc_num_tolerated_disk_barrier_failures(fs_info); in btrfs_balance()
3507 update_ioctl_balance_args(fs_info, 0, bargs); in btrfs_balance()
3511 balance_need_close(fs_info)) { in btrfs_balance()
3512 __cancel_balance(fs_info); in btrfs_balance()
3515 wake_up(&fs_info->balance_wait_q); in btrfs_balance()
3520 __cancel_balance(fs_info); in btrfs_balance()
3523 atomic_set(&fs_info->mutually_exclusive_operation_running, 0); in btrfs_balance()
3530 struct btrfs_fs_info *fs_info = data; in balance_kthread() local
3533 mutex_lock(&fs_info->volume_mutex); in balance_kthread()
3534 mutex_lock(&fs_info->balance_mutex); in balance_kthread()
3536 if (fs_info->balance_ctl) { in balance_kthread()
3537 btrfs_info(fs_info, "continuing balance"); in balance_kthread()
3538 ret = btrfs_balance(fs_info->balance_ctl, NULL); in balance_kthread()
3541 mutex_unlock(&fs_info->balance_mutex); in balance_kthread()
3542 mutex_unlock(&fs_info->volume_mutex); in balance_kthread()
3547 int btrfs_resume_balance_async(struct btrfs_fs_info *fs_info) in btrfs_resume_balance_async() argument
3551 spin_lock(&fs_info->balance_lock); in btrfs_resume_balance_async()
3552 if (!fs_info->balance_ctl) { in btrfs_resume_balance_async()
3553 spin_unlock(&fs_info->balance_lock); in btrfs_resume_balance_async()
3556 spin_unlock(&fs_info->balance_lock); in btrfs_resume_balance_async()
3558 if (btrfs_test_opt(fs_info->tree_root, SKIP_BALANCE)) { in btrfs_resume_balance_async()
3559 btrfs_info(fs_info, "force skipping balance"); in btrfs_resume_balance_async()
3563 tsk = kthread_run(balance_kthread, fs_info, "btrfs-balance"); in btrfs_resume_balance_async()
3567 int btrfs_recover_balance(struct btrfs_fs_info *fs_info) in btrfs_recover_balance() argument
3585 ret = btrfs_search_slot(NULL, fs_info->tree_root, &key, path, 0, 0); in btrfs_recover_balance()
3602 bctl->fs_info = fs_info; in btrfs_recover_balance()
3613 WARN_ON(atomic_xchg(&fs_info->mutually_exclusive_operation_running, 1)); in btrfs_recover_balance()
3615 mutex_lock(&fs_info->volume_mutex); in btrfs_recover_balance()
3616 mutex_lock(&fs_info->balance_mutex); in btrfs_recover_balance()
3620 mutex_unlock(&fs_info->balance_mutex); in btrfs_recover_balance()
3621 mutex_unlock(&fs_info->volume_mutex); in btrfs_recover_balance()
3627 int btrfs_pause_balance(struct btrfs_fs_info *fs_info) in btrfs_pause_balance() argument
3631 mutex_lock(&fs_info->balance_mutex); in btrfs_pause_balance()
3632 if (!fs_info->balance_ctl) { in btrfs_pause_balance()
3633 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
3637 if (atomic_read(&fs_info->balance_running)) { in btrfs_pause_balance()
3638 atomic_inc(&fs_info->balance_pause_req); in btrfs_pause_balance()
3639 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
3641 wait_event(fs_info->balance_wait_q, in btrfs_pause_balance()
3642 atomic_read(&fs_info->balance_running) == 0); in btrfs_pause_balance()
3644 mutex_lock(&fs_info->balance_mutex); in btrfs_pause_balance()
3646 BUG_ON(atomic_read(&fs_info->balance_running)); in btrfs_pause_balance()
3647 atomic_dec(&fs_info->balance_pause_req); in btrfs_pause_balance()
3652 mutex_unlock(&fs_info->balance_mutex); in btrfs_pause_balance()
3656 int btrfs_cancel_balance(struct btrfs_fs_info *fs_info) in btrfs_cancel_balance() argument
3658 if (fs_info->sb->s_flags & MS_RDONLY) in btrfs_cancel_balance()
3661 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
3662 if (!fs_info->balance_ctl) { in btrfs_cancel_balance()
3663 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
3667 atomic_inc(&fs_info->balance_cancel_req); in btrfs_cancel_balance()
3672 if (atomic_read(&fs_info->balance_running)) { in btrfs_cancel_balance()
3673 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
3674 wait_event(fs_info->balance_wait_q, in btrfs_cancel_balance()
3675 atomic_read(&fs_info->balance_running) == 0); in btrfs_cancel_balance()
3676 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
3679 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
3680 mutex_lock(&fs_info->volume_mutex); in btrfs_cancel_balance()
3681 mutex_lock(&fs_info->balance_mutex); in btrfs_cancel_balance()
3683 if (fs_info->balance_ctl) in btrfs_cancel_balance()
3684 __cancel_balance(fs_info); in btrfs_cancel_balance()
3686 mutex_unlock(&fs_info->volume_mutex); in btrfs_cancel_balance()
3689 BUG_ON(fs_info->balance_ctl || atomic_read(&fs_info->balance_running)); in btrfs_cancel_balance()
3690 atomic_dec(&fs_info->balance_cancel_req); in btrfs_cancel_balance()
3691 mutex_unlock(&fs_info->balance_mutex); in btrfs_cancel_balance()
3697 struct btrfs_fs_info *fs_info = data; in btrfs_uuid_scan_kthread() local
3698 struct btrfs_root *root = fs_info->tree_root; in btrfs_uuid_scan_kthread()
3759 trans = btrfs_start_transaction(fs_info->uuid_root, 2); in btrfs_uuid_scan_kthread()
3770 ret = btrfs_uuid_tree_add(trans, fs_info->uuid_root, in btrfs_uuid_scan_kthread()
3775 btrfs_warn(fs_info, "uuid_tree_add failed %d", in btrfs_uuid_scan_kthread()
3782 ret = btrfs_uuid_tree_add(trans, fs_info->uuid_root, in btrfs_uuid_scan_kthread()
3787 btrfs_warn(fs_info, "uuid_tree_add failed %d", in btrfs_uuid_scan_kthread()
3795 ret = btrfs_end_transaction(trans, fs_info->uuid_root); in btrfs_uuid_scan_kthread()
3820 btrfs_end_transaction(trans, fs_info->uuid_root); in btrfs_uuid_scan_kthread()
3822 btrfs_warn(fs_info, "btrfs_uuid_scan_kthread failed %d", ret); in btrfs_uuid_scan_kthread()
3824 fs_info->update_uuid_tree_gen = 1; in btrfs_uuid_scan_kthread()
3825 up(&fs_info->uuid_tree_rescan_sem); in btrfs_uuid_scan_kthread()
3836 static int btrfs_check_uuid_tree_entry(struct btrfs_fs_info *fs_info, in btrfs_check_uuid_tree_entry() argument
3850 subvol_root = btrfs_read_fs_root_no_name(fs_info, &key); in btrfs_check_uuid_tree_entry()
3876 struct btrfs_fs_info *fs_info = (struct btrfs_fs_info *)data; in btrfs_uuid_rescan_kthread() local
3884 ret = btrfs_uuid_tree_iterate(fs_info, btrfs_check_uuid_tree_entry); in btrfs_uuid_rescan_kthread()
3886 btrfs_warn(fs_info, "iterating uuid_tree failed %d", ret); in btrfs_uuid_rescan_kthread()
3887 up(&fs_info->uuid_tree_rescan_sem); in btrfs_uuid_rescan_kthread()
3893 int btrfs_create_uuid_tree(struct btrfs_fs_info *fs_info) in btrfs_create_uuid_tree() argument
3896 struct btrfs_root *tree_root = fs_info->tree_root; in btrfs_create_uuid_tree()
3909 uuid_root = btrfs_create_tree(trans, fs_info, in btrfs_create_uuid_tree()
3917 fs_info->uuid_root = uuid_root; in btrfs_create_uuid_tree()
3923 down(&fs_info->uuid_tree_rescan_sem); in btrfs_create_uuid_tree()
3924 task = kthread_run(btrfs_uuid_scan_kthread, fs_info, "btrfs-uuid"); in btrfs_create_uuid_tree()
3927 btrfs_warn(fs_info, "failed to start uuid_scan task"); in btrfs_create_uuid_tree()
3928 up(&fs_info->uuid_tree_rescan_sem); in btrfs_create_uuid_tree()
3935 int btrfs_check_uuid_tree(struct btrfs_fs_info *fs_info) in btrfs_check_uuid_tree() argument
3939 down(&fs_info->uuid_tree_rescan_sem); in btrfs_check_uuid_tree()
3940 task = kthread_run(btrfs_uuid_rescan_kthread, fs_info, "btrfs-uuid"); in btrfs_check_uuid_tree()
3943 btrfs_warn(fs_info, "failed to start uuid_rescan task"); in btrfs_check_uuid_tree()
3944 up(&fs_info->uuid_tree_rescan_sem); in btrfs_check_uuid_tree()
3971 struct btrfs_super_block *super_copy = root->fs_info->super_copy; in btrfs_shrink_device()
3990 spin_lock(&root->fs_info->free_chunk_lock); in btrfs_shrink_device()
3991 root->fs_info->free_chunk_space -= diff; in btrfs_shrink_device()
3992 spin_unlock(&root->fs_info->free_chunk_lock); in btrfs_shrink_device()
4054 spin_lock(&root->fs_info->free_chunk_lock); in btrfs_shrink_device()
4055 root->fs_info->free_chunk_space += diff; in btrfs_shrink_device()
4056 spin_unlock(&root->fs_info->free_chunk_lock); in btrfs_shrink_device()
4072 &root->fs_info->fs_devices->resized_devices); in btrfs_shrink_device()
4090 struct btrfs_super_block *super_copy = root->fs_info->super_copy; in btrfs_add_system_chunk()
4221 struct btrfs_fs_info *info = extent_root->fs_info; in __btrfs_alloc_chunk()
4462 em_tree = &extent_root->fs_info->mapping_tree.map_tree; in __btrfs_alloc_chunk()
4486 spin_lock(&extent_root->fs_info->free_chunk_lock); in __btrfs_alloc_chunk()
4487 extent_root->fs_info->free_chunk_space -= (stripe_size * in __btrfs_alloc_chunk()
4489 spin_unlock(&extent_root->fs_info->free_chunk_lock); in __btrfs_alloc_chunk()
4492 check_raid56_incompat_flag(extent_root->fs_info, type); in __btrfs_alloc_chunk()
4518 struct btrfs_root *chunk_root = extent_root->fs_info->chunk_root; in btrfs_finish_chunk_alloc()
4531 em_tree = &extent_root->fs_info->mapping_tree.map_tree; in btrfs_finish_chunk_alloc()
4537 btrfs_crit(extent_root->fs_info, "unable to find logical " in btrfs_finish_chunk_alloc()
4543 btrfs_crit(extent_root->fs_info, "found a bad mapping, wanted" in btrfs_finish_chunk_alloc()
4629 ASSERT(mutex_is_locked(&extent_root->fs_info->chunk_mutex)); in btrfs_alloc_chunk()
4630 chunk_offset = find_next_chunk(extent_root->fs_info); in btrfs_alloc_chunk()
4641 struct btrfs_fs_info *fs_info = root->fs_info; in init_first_rw_device() local
4642 struct btrfs_root *extent_root = fs_info->extent_root; in init_first_rw_device()
4645 chunk_offset = find_next_chunk(fs_info); in init_first_rw_device()
4652 sys_chunk_offset = find_next_chunk(root->fs_info); in init_first_rw_device()
4653 alloc_profile = btrfs_get_alloc_profile(fs_info->chunk_root, 0); in init_first_rw_device()
4681 struct btrfs_mapping_tree *map_tree = &root->fs_info->mapping_tree; in btrfs_chunk_readonly()
4741 int btrfs_num_copies(struct btrfs_fs_info *fs_info, u64 logical, u64 len) in btrfs_num_copies() argument
4743 struct btrfs_mapping_tree *map_tree = &fs_info->mapping_tree; in btrfs_num_copies()
4759 btrfs_crit(fs_info, "No mapping for %Lu-%Lu", logical, in btrfs_num_copies()
4765 btrfs_crit(fs_info, "Invalid mapping for %Lu-%Lu, got " in btrfs_num_copies()
4785 btrfs_dev_replace_lock(&fs_info->dev_replace); in btrfs_num_copies()
4786 if (btrfs_dev_replace_is_ongoing(&fs_info->dev_replace)) in btrfs_num_copies()
4788 btrfs_dev_replace_unlock(&fs_info->dev_replace); in btrfs_num_copies()
4836 static int find_live_mirror(struct btrfs_fs_info *fs_info, in find_live_mirror() argument
4845 fs_info->dev_replace.cont_reading_from_srcdev_mode == in find_live_mirror()
4847 srcdev = fs_info->dev_replace.srcdev; in find_live_mirror()
4942 static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw, in __btrfs_map_block() argument
4949 struct btrfs_mapping_tree *map_tree = &fs_info->mapping_tree; in __btrfs_map_block()
4965 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in __btrfs_map_block()
4977 btrfs_crit(fs_info, "unable to find logical %llu len %llu", in __btrfs_map_block()
4983 btrfs_crit(fs_info, "found a bad mapping, wanted %Lu, " in __btrfs_map_block()
5078 ret = __btrfs_map_block(fs_info, REQ_GET_READ_MIRRORS, in __btrfs_map_block()
5159 stripe_index = find_live_mirror(fs_info, map, 0, in __btrfs_map_block()
5191 stripe_index = find_live_mirror(fs_info, map, in __btrfs_map_block()
5484 int btrfs_map_block(struct btrfs_fs_info *fs_info, int rw, in btrfs_map_block() argument
5488 return __btrfs_map_block(fs_info, rw, logical, length, bbio_ret, in btrfs_map_block()
5493 int btrfs_map_sblock(struct btrfs_fs_info *fs_info, int rw, in btrfs_map_sblock() argument
5498 return __btrfs_map_block(fs_info, rw, logical, length, bbio_ret, in btrfs_map_sblock()
5629 btrfs_bio_counter_dec(bbio->fs_info); in btrfs_end_bio()
5693 atomic_inc(&root->fs_info->nr_async_bios); in btrfs_schedule_bio()
5716 btrfs_queue_work(root->fs_info->submit_workers, in btrfs_schedule_bio()
5773 btrfs_bio_counter_inc_noblocked(root->fs_info); in submit_stripe_bio()
5845 btrfs_bio_counter_inc_blocked(root->fs_info); in btrfs_map_bio()
5846 ret = __btrfs_map_block(root->fs_info, rw, logical, &map_length, &bbio, in btrfs_map_bio()
5849 btrfs_bio_counter_dec(root->fs_info); in btrfs_map_bio()
5857 bbio->fs_info = root->fs_info; in btrfs_map_bio()
5870 btrfs_bio_counter_dec(root->fs_info); in btrfs_map_bio()
5875 btrfs_crit(root->fs_info, "mapping failed logical %llu bio len %llu len %llu", in btrfs_map_bio()
5911 btrfs_bio_counter_dec(root->fs_info); in btrfs_map_bio()
5915 struct btrfs_device *btrfs_find_device(struct btrfs_fs_info *fs_info, u64 devid, in btrfs_find_device() argument
5921 cur_devices = fs_info->fs_devices; in btrfs_find_device()
5968 struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info, in btrfs_alloc_device() argument
5975 if (WARN_ON(!devid && !fs_info)) in btrfs_alloc_device()
5987 ret = find_next_devid(fs_info, &tmp); in btrfs_alloc_device()
6010 struct btrfs_mapping_tree *map_tree = &root->fs_info->mapping_tree; in read_one_chunk()
6068 map->stripes[i].dev = btrfs_find_device(root->fs_info, devid, in read_one_chunk()
6076 add_missing_dev(root, root->fs_info->fs_devices, in read_one_chunk()
6126 fs_devices = root->fs_info->fs_devices->seed; in open_seed_devices()
6153 root->fs_info->bdev_holder); in open_seed_devices()
6167 fs_devices->seed = root->fs_info->fs_devices->seed; in open_seed_devices()
6168 root->fs_info->fs_devices->seed = fs_devices; in open_seed_devices()
6177 struct btrfs_fs_devices *fs_devices = root->fs_info->fs_devices; in read_one_dev()
6190 if (memcmp(fs_uuid, root->fs_info->fsid, BTRFS_UUID_SIZE)) { in read_one_dev()
6196 device = btrfs_find_device(root->fs_info, devid, dev_uuid, fs_uuid); in read_one_dev()
6201 btrfs_warn(root->fs_info, "devid %llu missing", devid); in read_one_dev()
6235 if (device->fs_devices != root->fs_info->fs_devices) { in read_one_dev()
6246 spin_lock(&root->fs_info->free_chunk_lock); in read_one_dev()
6247 root->fs_info->free_chunk_space += device->total_bytes - in read_one_dev()
6249 spin_unlock(&root->fs_info->free_chunk_lock); in read_one_dev()
6257 struct btrfs_super_block *super_copy = root->fs_info->super_copy; in btrfs_read_sys_array()
6368 root = root->fs_info->chunk_root; in btrfs_read_chunk_tree()
6426 void btrfs_init_devices_late(struct btrfs_fs_info *fs_info) in btrfs_init_devices_late() argument
6428 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_devices_late()
6434 device->dev_root = fs_info->dev_root; in btrfs_init_devices_late()
6449 int btrfs_init_dev_stats(struct btrfs_fs_info *fs_info) in btrfs_init_dev_stats() argument
6453 struct btrfs_root *dev_root = fs_info->dev_root; in btrfs_init_dev_stats()
6454 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_init_dev_stats()
6577 struct btrfs_fs_info *fs_info) in btrfs_run_dev_stats() argument
6579 struct btrfs_root *dev_root = fs_info->dev_root; in btrfs_run_dev_stats()
6580 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_run_dev_stats()
6644 struct btrfs_fs_devices *fs_devices = root->fs_info->fs_devices; in btrfs_get_dev_stats()
6648 dev = btrfs_find_device(root->fs_info, stats->devid, NULL, NULL); in btrfs_get_dev_stats()
6652 btrfs_warn(root->fs_info, "get dev_stats failed, device not found"); in btrfs_get_dev_stats()
6655 btrfs_warn(root->fs_info, "get dev_stats failed, not yet valid"); in btrfs_get_dev_stats()
6697 void btrfs_update_commit_device_size(struct btrfs_fs_info *fs_info) in btrfs_update_commit_device_size() argument
6699 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in btrfs_update_commit_device_size()
6706 lock_chunks(fs_info->dev_root); in btrfs_update_commit_device_size()
6712 unlock_chunks(fs_info->dev_root); in btrfs_update_commit_device_size()