Lines Matching refs:fs_info
250 static void scrub_recheck_block(struct btrfs_fs_info *fs_info,
280 static void scrub_remap_extent(struct btrfs_fs_info *fs_info,
287 struct btrfs_fs_info *fs_info,
303 static void __scrub_blocked_if_needed(struct btrfs_fs_info *fs_info);
304 static void scrub_blocked_if_needed(struct btrfs_fs_info *fs_info);
321 static void __scrub_blocked_if_needed(struct btrfs_fs_info *fs_info) in __scrub_blocked_if_needed() argument
323 while (atomic_read(&fs_info->scrub_pause_req)) { in __scrub_blocked_if_needed()
324 mutex_unlock(&fs_info->scrub_lock); in __scrub_blocked_if_needed()
325 wait_event(fs_info->scrub_pause_wait, in __scrub_blocked_if_needed()
326 atomic_read(&fs_info->scrub_pause_req) == 0); in __scrub_blocked_if_needed()
327 mutex_lock(&fs_info->scrub_lock); in __scrub_blocked_if_needed()
331 static void scrub_pause_on(struct btrfs_fs_info *fs_info) in scrub_pause_on() argument
333 atomic_inc(&fs_info->scrubs_paused); in scrub_pause_on()
334 wake_up(&fs_info->scrub_pause_wait); in scrub_pause_on()
337 static void scrub_pause_off(struct btrfs_fs_info *fs_info) in scrub_pause_off() argument
339 mutex_lock(&fs_info->scrub_lock); in scrub_pause_off()
340 __scrub_blocked_if_needed(fs_info); in scrub_pause_off()
341 atomic_dec(&fs_info->scrubs_paused); in scrub_pause_off()
342 mutex_unlock(&fs_info->scrub_lock); in scrub_pause_off()
344 wake_up(&fs_info->scrub_pause_wait); in scrub_pause_off()
347 static void scrub_blocked_if_needed(struct btrfs_fs_info *fs_info) in scrub_blocked_if_needed() argument
349 scrub_pause_on(fs_info); in scrub_blocked_if_needed()
350 scrub_pause_off(fs_info); in scrub_blocked_if_needed()
359 struct btrfs_fs_info *fs_info = sctx->dev_root->fs_info; in scrub_pending_trans_workers_inc() local
371 mutex_lock(&fs_info->scrub_lock); in scrub_pending_trans_workers_inc()
372 atomic_inc(&fs_info->scrubs_running); in scrub_pending_trans_workers_inc()
373 atomic_inc(&fs_info->scrubs_paused); in scrub_pending_trans_workers_inc()
374 mutex_unlock(&fs_info->scrub_lock); in scrub_pending_trans_workers_inc()
383 wake_up(&fs_info->scrub_pause_wait); in scrub_pending_trans_workers_inc()
391 struct btrfs_fs_info *fs_info = sctx->dev_root->fs_info; in scrub_pending_trans_workers_dec() local
397 mutex_lock(&fs_info->scrub_lock); in scrub_pending_trans_workers_dec()
398 atomic_dec(&fs_info->scrubs_running); in scrub_pending_trans_workers_dec()
399 atomic_dec(&fs_info->scrubs_paused); in scrub_pending_trans_workers_dec()
400 mutex_unlock(&fs_info->scrub_lock); in scrub_pending_trans_workers_dec()
402 wake_up(&fs_info->scrub_pause_wait); in scrub_pending_trans_workers_dec()
461 struct btrfs_fs_info *fs_info = dev->dev_root->fs_info; in scrub_setup_ctx() local
497 sctx->csum_size = btrfs_super_csum_size(fs_info->super_copy); in scrub_setup_ctx()
504 ret = scrub_setup_wr_ctx(sctx, &sctx->wr_ctx, fs_info, in scrub_setup_ctx()
505 fs_info->dev_replace.tgtdev, is_dev_replace); in scrub_setup_ctx()
527 struct btrfs_fs_info *fs_info = swarn->dev->dev_root->fs_info; in scrub_print_warning_inode() local
536 local_root = btrfs_read_fs_root_no_name(fs_info, &root_key); in scrub_print_warning_inode()
578 btrfs_warn_in_rcu(fs_info, "%s at logical %llu on dev " in scrub_print_warning_inode()
590 btrfs_warn_in_rcu(fs_info, "%s at logical %llu on dev " in scrub_print_warning_inode()
603 struct btrfs_fs_info *fs_info; in scrub_print_warning() local
619 fs_info = sblock->sctx->dev_root->fs_info; in scrub_print_warning()
630 ret = extent_from_logical(fs_info, swarn.logical, path, &found_key, in scrub_print_warning()
647 btrfs_warn_in_rcu(fs_info, in scrub_print_warning()
662 iterate_extent_inodes(fs_info, found_key.objectid, in scrub_print_warning()
680 struct btrfs_fs_info *fs_info; in scrub_fixup_readpage() local
689 fs_info = fixup->root->fs_info; in scrub_fixup_readpage()
690 srcu_index = srcu_read_lock(&fs_info->subvol_srcu); in scrub_fixup_readpage()
692 local_root = btrfs_read_fs_root_no_name(fs_info, &key); in scrub_fixup_readpage()
694 srcu_read_unlock(&fs_info->subvol_srcu, srcu_index); in scrub_fixup_readpage()
701 inode = btrfs_iget(fs_info->sb, &key, local_root, NULL); in scrub_fixup_readpage()
702 srcu_read_unlock(&fs_info->subvol_srcu, srcu_index); in scrub_fixup_readpage()
825 ret = iterate_inodes_from_logical(fixup->logical, fixup->root->fs_info, in scrub_fixup_nodatasum()
846 &sctx->dev_root->fs_info->dev_replace. in scrub_fixup_nodatasum()
848 btrfs_err_rl_in_rcu(sctx->dev_root->fs_info, in scrub_fixup_nodatasum()
884 struct btrfs_fs_info *fs_info; in scrub_handle_errored_block() local
900 fs_info = sctx->dev_root->fs_info; in scrub_handle_errored_block()
981 scrub_recheck_block(fs_info, sblock_bad, 1); in scrub_handle_errored_block()
1058 fixup_nodatasum->root = fs_info->extent_root; in scrub_handle_errored_block()
1063 btrfs_queue_work(fs_info->scrub_workers, in scrub_handle_errored_block()
1094 scrub_recheck_block(fs_info, sblock_other, 0); in scrub_handle_errored_block()
1180 fs_info->dev_replace. in scrub_handle_errored_block()
1206 scrub_recheck_block(fs_info, sblock_bad, 1); in scrub_handle_errored_block()
1219 btrfs_err_rl_in_rcu(fs_info, in scrub_handle_errored_block()
1228 btrfs_err_rl_in_rcu(fs_info, in scrub_handle_errored_block()
1304 struct btrfs_fs_info *fs_info = sctx->dev_root->fs_info; in scrub_setup_recheck_block() local
1336 ret = btrfs_map_sblock(fs_info, REQ_GET_READ_MIRRORS, logical, in scrub_setup_recheck_block()
1441 static int scrub_submit_raid56_bio_wait(struct btrfs_fs_info *fs_info, in scrub_submit_raid56_bio_wait() argument
1454 ret = raid56_parity_recover(fs_info->fs_root, bio, page->recover->bbio, in scrub_submit_raid56_bio_wait()
1474 static void scrub_recheck_block(struct btrfs_fs_info *fs_info, in scrub_recheck_block() argument
1503 if (scrub_submit_raid56_bio_wait(fs_info, bio, page)) in scrub_recheck_block()
1577 btrfs_warn_rl(sblock_bad->sctx->dev_root->fs_info, in scrub_repair_page_from_good_copy()
1599 &sblock_bad->sctx->dev_root->fs_info-> in scrub_repair_page_from_good_copy()
1627 &sblock->sctx->dev_root->fs_info->dev_replace. in scrub_write_block_to_dev_replace()
1741 struct btrfs_fs_info *fs_info = sbio->dev->dev_root->fs_info; in scrub_wr_bio_end_io() local
1748 btrfs_queue_work(fs_info->scrub_wr_completion_workers, &sbio->work); in scrub_wr_bio_end_io()
1760 &sbio->sctx->dev_root->fs_info->dev_replace; in scrub_wr_bio_end_io_worker()
1861 struct btrfs_fs_info *fs_info = root->fs_info; in scrub_checksum_tree_block() local
1894 if (memcmp(h->chunk_tree_uuid, fs_info->chunk_tree_uuid, in scrub_checksum_tree_block()
2125 struct btrfs_fs_info *fs_info = sblock->sctx->dev_root->fs_info; in scrub_missing_raid56_end_io() local
2130 btrfs_queue_work(fs_info->scrub_workers, &sblock->work); in scrub_missing_raid56_end_io()
2150 btrfs_err_rl_in_rcu(sctx->dev_root->fs_info, in scrub_missing_raid56_worker()
2157 btrfs_err_rl_in_rcu(sctx->dev_root->fs_info, in scrub_missing_raid56_worker()
2179 struct btrfs_fs_info *fs_info = sctx->dev_root->fs_info; in scrub_missing_raid56_pages() local
2188 ret = btrfs_map_sblock(fs_info, REQ_GET_READ_MIRRORS, logical, &length, in scrub_missing_raid56_pages()
2331 struct btrfs_fs_info *fs_info = sbio->dev->dev_root->fs_info; in scrub_bio_end_io() local
2336 btrfs_queue_work(fs_info->scrub_workers, &sbio->work); in scrub_bio_end_io()
2756 btrfs_queue_work(sparity->sctx->dev_root->fs_info->scrub_parity_workers, in scrub_parity_bio_endio()
2775 ret = btrfs_map_sblock(sctx->dev_root->fs_info, WRITE, in scrub_parity_check_and_repair()
2841 struct btrfs_fs_info *fs_info = sctx->dev_root->fs_info; in scrub_raid56_parity() local
2842 struct btrfs_root *root = fs_info->extent_root; in scrub_raid56_parity()
2843 struct btrfs_root *csum_root = fs_info->csum_root; in scrub_raid56_parity()
2887 if (btrfs_fs_incompat(fs_info, SKINNY_METADATA)) in scrub_raid56_parity()
2958 btrfs_err(fs_info, "scrub: tree block %llu spanning stripes, ignored. logical=%llu", in scrub_raid56_parity()
2983 ret = btrfs_map_block(fs_info, READ, extent_logical, in scrub_raid56_parity()
3063 struct btrfs_fs_info *fs_info = sctx->dev_root->fs_info; in scrub_stripe() local
3064 struct btrfs_root *root = fs_info->extent_root; in scrub_stripe()
3065 struct btrfs_root *csum_root = fs_info->csum_root; in scrub_stripe()
3158 scrub_blocked_if_needed(fs_info); in scrub_stripe()
3197 if (atomic_read(&fs_info->scrub_cancel_req) || in scrub_stripe()
3205 if (atomic_read(&fs_info->scrub_pause_req)) { in scrub_stripe()
3215 scrub_blocked_if_needed(fs_info); in scrub_stripe()
3236 if (btrfs_fs_incompat(fs_info, SKINNY_METADATA)) in scrub_stripe()
3308 btrfs_err(fs_info, in scrub_stripe()
3339 scrub_remap_extent(fs_info, extent_logical, in scrub_stripe()
3440 &sctx->dev_root->fs_info->mapping_tree; in scrub_chunk()
3494 struct btrfs_fs_info *fs_info = root->fs_info; in scrub_enumerate_chunks() local
3504 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in scrub_enumerate_chunks()
3566 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in scrub_enumerate_chunks()
3581 scrub_pause_on(fs_info); in scrub_enumerate_chunks()
3583 scrub_pause_off(fs_info); in scrub_enumerate_chunks()
3597 btrfs_warn(fs_info, "failed setting block group ro, ret=%d\n", in scrub_enumerate_chunks()
3628 scrub_pause_on(fs_info); in scrub_enumerate_chunks()
3639 scrub_pause_off(fs_info); in scrub_enumerate_chunks()
3655 spin_lock(&fs_info->unused_bgs_lock); in scrub_enumerate_chunks()
3659 &fs_info->unused_bgs); in scrub_enumerate_chunks()
3661 spin_unlock(&fs_info->unused_bgs_lock); in scrub_enumerate_chunks()
3700 if (test_bit(BTRFS_FS_STATE_ERROR, &root->fs_info->fs_state)) in scrub_supers()
3704 if (scrub_dev->fs_devices != root->fs_info->fs_devices) in scrub_supers()
3707 gen = root->fs_info->last_trans_committed; in scrub_supers()
3729 static noinline_for_stack int scrub_workers_get(struct btrfs_fs_info *fs_info, in scrub_workers_get() argument
3733 int max_active = fs_info->thread_pool_size; in scrub_workers_get()
3735 if (fs_info->scrub_workers_refcnt == 0) { in scrub_workers_get()
3737 fs_info->scrub_workers = in scrub_workers_get()
3741 fs_info->scrub_workers = in scrub_workers_get()
3744 if (!fs_info->scrub_workers) in scrub_workers_get()
3747 fs_info->scrub_wr_completion_workers = in scrub_workers_get()
3750 if (!fs_info->scrub_wr_completion_workers) in scrub_workers_get()
3753 fs_info->scrub_nocow_workers = in scrub_workers_get()
3755 if (!fs_info->scrub_nocow_workers) in scrub_workers_get()
3757 fs_info->scrub_parity_workers = in scrub_workers_get()
3760 if (!fs_info->scrub_parity_workers) in scrub_workers_get()
3763 ++fs_info->scrub_workers_refcnt; in scrub_workers_get()
3767 btrfs_destroy_workqueue(fs_info->scrub_nocow_workers); in scrub_workers_get()
3769 btrfs_destroy_workqueue(fs_info->scrub_wr_completion_workers); in scrub_workers_get()
3771 btrfs_destroy_workqueue(fs_info->scrub_workers); in scrub_workers_get()
3776 static noinline_for_stack void scrub_workers_put(struct btrfs_fs_info *fs_info) in scrub_workers_put() argument
3778 if (--fs_info->scrub_workers_refcnt == 0) { in scrub_workers_put()
3779 btrfs_destroy_workqueue(fs_info->scrub_workers); in scrub_workers_put()
3780 btrfs_destroy_workqueue(fs_info->scrub_wr_completion_workers); in scrub_workers_put()
3781 btrfs_destroy_workqueue(fs_info->scrub_nocow_workers); in scrub_workers_put()
3782 btrfs_destroy_workqueue(fs_info->scrub_parity_workers); in scrub_workers_put()
3784 WARN_ON(fs_info->scrub_workers_refcnt < 0); in scrub_workers_put()
3787 int btrfs_scrub_dev(struct btrfs_fs_info *fs_info, u64 devid, u64 start, in btrfs_scrub_dev() argument
3796 if (btrfs_fs_closing(fs_info)) in btrfs_scrub_dev()
3799 if (fs_info->chunk_root->nodesize > BTRFS_STRIPE_LEN) { in btrfs_scrub_dev()
3805 btrfs_err(fs_info, in btrfs_scrub_dev()
3807 fs_info->chunk_root->nodesize, BTRFS_STRIPE_LEN); in btrfs_scrub_dev()
3811 if (fs_info->chunk_root->sectorsize != PAGE_SIZE) { in btrfs_scrub_dev()
3813 btrfs_err(fs_info, in btrfs_scrub_dev()
3816 fs_info->chunk_root->sectorsize, PAGE_SIZE); in btrfs_scrub_dev()
3820 if (fs_info->chunk_root->nodesize > in btrfs_scrub_dev()
3822 fs_info->chunk_root->sectorsize > in btrfs_scrub_dev()
3828 btrfs_err(fs_info, "scrub: size assumption nodesize and sectorsize " in btrfs_scrub_dev()
3830 fs_info->chunk_root->nodesize, in btrfs_scrub_dev()
3832 fs_info->chunk_root->sectorsize, in btrfs_scrub_dev()
3838 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
3839 dev = btrfs_find_device(fs_info, devid, NULL, NULL); in btrfs_scrub_dev()
3841 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
3846 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
3849 btrfs_err(fs_info, "scrub: device %s is not writable", in btrfs_scrub_dev()
3855 mutex_lock(&fs_info->scrub_lock); in btrfs_scrub_dev()
3857 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_dev()
3858 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
3862 btrfs_dev_replace_lock(&fs_info->dev_replace); in btrfs_scrub_dev()
3865 btrfs_dev_replace_is_ongoing(&fs_info->dev_replace))) { in btrfs_scrub_dev()
3866 btrfs_dev_replace_unlock(&fs_info->dev_replace); in btrfs_scrub_dev()
3867 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_dev()
3868 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
3871 btrfs_dev_replace_unlock(&fs_info->dev_replace); in btrfs_scrub_dev()
3873 ret = scrub_workers_get(fs_info, is_dev_replace); in btrfs_scrub_dev()
3875 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_dev()
3876 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
3882 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_dev()
3883 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
3884 scrub_workers_put(fs_info); in btrfs_scrub_dev()
3889 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
3895 __scrub_blocked_if_needed(fs_info); in btrfs_scrub_dev()
3896 atomic_inc(&fs_info->scrubs_running); in btrfs_scrub_dev()
3897 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_dev()
3904 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
3906 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
3914 atomic_dec(&fs_info->scrubs_running); in btrfs_scrub_dev()
3915 wake_up(&fs_info->scrub_pause_wait); in btrfs_scrub_dev()
3922 mutex_lock(&fs_info->scrub_lock); in btrfs_scrub_dev()
3924 scrub_workers_put(fs_info); in btrfs_scrub_dev()
3925 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_dev()
3934 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_scrub_pause() local
3936 mutex_lock(&fs_info->scrub_lock); in btrfs_scrub_pause()
3937 atomic_inc(&fs_info->scrub_pause_req); in btrfs_scrub_pause()
3938 while (atomic_read(&fs_info->scrubs_paused) != in btrfs_scrub_pause()
3939 atomic_read(&fs_info->scrubs_running)) { in btrfs_scrub_pause()
3940 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_pause()
3941 wait_event(fs_info->scrub_pause_wait, in btrfs_scrub_pause()
3942 atomic_read(&fs_info->scrubs_paused) == in btrfs_scrub_pause()
3943 atomic_read(&fs_info->scrubs_running)); in btrfs_scrub_pause()
3944 mutex_lock(&fs_info->scrub_lock); in btrfs_scrub_pause()
3946 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_pause()
3951 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_scrub_continue() local
3953 atomic_dec(&fs_info->scrub_pause_req); in btrfs_scrub_continue()
3954 wake_up(&fs_info->scrub_pause_wait); in btrfs_scrub_continue()
3957 int btrfs_scrub_cancel(struct btrfs_fs_info *fs_info) in btrfs_scrub_cancel() argument
3959 mutex_lock(&fs_info->scrub_lock); in btrfs_scrub_cancel()
3960 if (!atomic_read(&fs_info->scrubs_running)) { in btrfs_scrub_cancel()
3961 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_cancel()
3965 atomic_inc(&fs_info->scrub_cancel_req); in btrfs_scrub_cancel()
3966 while (atomic_read(&fs_info->scrubs_running)) { in btrfs_scrub_cancel()
3967 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_cancel()
3968 wait_event(fs_info->scrub_pause_wait, in btrfs_scrub_cancel()
3969 atomic_read(&fs_info->scrubs_running) == 0); in btrfs_scrub_cancel()
3970 mutex_lock(&fs_info->scrub_lock); in btrfs_scrub_cancel()
3972 atomic_dec(&fs_info->scrub_cancel_req); in btrfs_scrub_cancel()
3973 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_cancel()
3978 int btrfs_scrub_cancel_dev(struct btrfs_fs_info *fs_info, in btrfs_scrub_cancel_dev() argument
3983 mutex_lock(&fs_info->scrub_lock); in btrfs_scrub_cancel_dev()
3986 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_cancel_dev()
3991 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_cancel_dev()
3992 wait_event(fs_info->scrub_pause_wait, in btrfs_scrub_cancel_dev()
3994 mutex_lock(&fs_info->scrub_lock); in btrfs_scrub_cancel_dev()
3996 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_cancel_dev()
4007 mutex_lock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_scrub_progress()
4008 dev = btrfs_find_device(root->fs_info, devid, NULL, NULL); in btrfs_scrub_progress()
4013 mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); in btrfs_scrub_progress()
4018 static void scrub_remap_extent(struct btrfs_fs_info *fs_info, in scrub_remap_extent() argument
4029 ret = btrfs_map_block(fs_info, READ, extent_logical, in scrub_remap_extent()
4045 struct btrfs_fs_info *fs_info, in scrub_setup_wr_ctx() argument
4075 struct btrfs_fs_info *fs_info = sctx->dev_root->fs_info; in copy_nocow_pages() local
4095 btrfs_queue_work(fs_info->scrub_nocow_workers, in copy_nocow_pages()
4129 struct btrfs_fs_info *fs_info; in copy_nocow_pages_worker() local
4134 fs_info = sctx->dev_root->fs_info; in copy_nocow_pages_worker()
4135 root = fs_info->extent_root; in copy_nocow_pages_worker()
4152 ret = iterate_inodes_from_logical(logical, fs_info, path, in copy_nocow_pages_worker()
4155 btrfs_warn(fs_info, "iterate_inodes_from_logical() failed: log %llu, " in copy_nocow_pages_worker()
4193 btrfs_dev_replace_stats_inc(&fs_info->dev_replace. in copy_nocow_pages_worker()
4249 struct btrfs_fs_info *fs_info = nocow_ctx->sctx->dev_root->fs_info; in copy_nocow_pages_for_inode() local
4267 srcu_index = srcu_read_lock(&fs_info->subvol_srcu); in copy_nocow_pages_for_inode()
4269 local_root = btrfs_read_fs_root_no_name(fs_info, &key); in copy_nocow_pages_for_inode()
4271 srcu_read_unlock(&fs_info->subvol_srcu, srcu_index); in copy_nocow_pages_for_inode()
4278 inode = btrfs_iget(fs_info->sb, &key, local_root, NULL); in copy_nocow_pages_for_inode()
4279 srcu_read_unlock(&fs_info->subvol_srcu, srcu_index); in copy_nocow_pages_for_inode()
4302 btrfs_err(fs_info, "find_or_create_page() failed"); in copy_nocow_pages_for_inode()
4379 btrfs_warn_rl(dev->dev_root->fs_info, in write_page_nocow()