Lines Matching refs:fs_info

156 	struct btrfs_fs_info	*fs_info;  member
215 static void scrub_recheck_block(struct btrfs_fs_info *fs_info,
242 static void scrub_remap_extent(struct btrfs_fs_info *fs_info,
273 static void __scrub_blocked_if_needed(struct btrfs_fs_info *fs_info) in __scrub_blocked_if_needed() argument
275 while (atomic_read(&fs_info->scrub_pause_req)) { in __scrub_blocked_if_needed()
276 mutex_unlock(&fs_info->scrub_lock); in __scrub_blocked_if_needed()
277 wait_event(fs_info->scrub_pause_wait, in __scrub_blocked_if_needed()
278 atomic_read(&fs_info->scrub_pause_req) == 0); in __scrub_blocked_if_needed()
279 mutex_lock(&fs_info->scrub_lock); in __scrub_blocked_if_needed()
283 static void scrub_pause_on(struct btrfs_fs_info *fs_info) in scrub_pause_on() argument
285 atomic_inc(&fs_info->scrubs_paused); in scrub_pause_on()
286 wake_up(&fs_info->scrub_pause_wait); in scrub_pause_on()
289 static void scrub_pause_off(struct btrfs_fs_info *fs_info) in scrub_pause_off() argument
291 mutex_lock(&fs_info->scrub_lock); in scrub_pause_off()
292 __scrub_blocked_if_needed(fs_info); in scrub_pause_off()
293 atomic_dec(&fs_info->scrubs_paused); in scrub_pause_off()
294 mutex_unlock(&fs_info->scrub_lock); in scrub_pause_off()
296 wake_up(&fs_info->scrub_pause_wait); in scrub_pause_off()
299 static void scrub_blocked_if_needed(struct btrfs_fs_info *fs_info) in scrub_blocked_if_needed() argument
301 scrub_pause_on(fs_info); in scrub_blocked_if_needed()
302 scrub_pause_off(fs_info); in scrub_blocked_if_needed()
418 static int lock_full_stripe(struct btrfs_fs_info *fs_info, u64 bytenr, in lock_full_stripe() argument
428 bg_cache = btrfs_lookup_block_group(fs_info, bytenr); in lock_full_stripe()
465 static int unlock_full_stripe(struct btrfs_fs_info *fs_info, u64 bytenr, in unlock_full_stripe() argument
479 bg_cache = btrfs_lookup_block_group(fs_info, bytenr); in unlock_full_stripe()
502 btrfs_warn(fs_info, "full stripe lock at %llu refcount underflow", in unlock_full_stripe()
571 struct btrfs_fs_info *fs_info, int is_dev_replace) in scrub_setup_ctx() argument
583 sctx->fs_info = fs_info; in scrub_setup_ctx()
618 WARN_ON(!fs_info->dev_replace.tgtdev); in scrub_setup_ctx()
620 sctx->wr_tgtdev = fs_info->dev_replace.tgtdev; in scrub_setup_ctx()
641 struct btrfs_fs_info *fs_info = swarn->dev->fs_info; in scrub_print_warning_inode() local
646 local_root = btrfs_get_fs_root(fs_info, root, true); in scrub_print_warning_inode()
696 btrfs_warn_in_rcu(fs_info, in scrub_print_warning_inode()
702 fs_info->sectorsize, nlink, in scrub_print_warning_inode()
710 btrfs_warn_in_rcu(fs_info, in scrub_print_warning_inode()
724 struct btrfs_fs_info *fs_info; in scrub_print_warning() local
740 fs_info = sblock->sctx->fs_info; in scrub_print_warning()
751 ret = extent_from_logical(fs_info, swarn.logical, path, &found_key, in scrub_print_warning()
768 btrfs_warn_in_rcu(fs_info, in scrub_print_warning()
782 iterate_extent_inodes(fs_info, found_key.objectid, in scrub_print_warning()
796 static inline void scrub_put_recover(struct btrfs_fs_info *fs_info, in scrub_put_recover() argument
800 btrfs_bio_counter_dec(fs_info); in scrub_put_recover()
818 struct btrfs_fs_info *fs_info; in scrub_handle_errored_block() local
835 fs_info = sctx->fs_info; in scrub_handle_errored_block()
855 if (btrfs_is_zoned(fs_info) && !sctx->is_dev_replace) in scrub_handle_errored_block()
856 return btrfs_repair_one_zone(fs_info, logical); in scrub_handle_errored_block()
875 ret = lock_full_stripe(fs_info, logical, &full_stripe_locked); in scrub_handle_errored_block()
942 scrub_recheck_block(fs_info, sblock_bad, 1); in scrub_handle_errored_block()
1043 scrub_recheck_block(fs_info, sblock_other, 0); in scrub_handle_errored_block()
1137 &fs_info->dev_replace.num_write_errors); in scrub_handle_errored_block()
1162 scrub_recheck_block(fs_info, sblock_bad, 1); in scrub_handle_errored_block()
1175 btrfs_err_rl_in_rcu(fs_info, in scrub_handle_errored_block()
1184 btrfs_err_rl_in_rcu(fs_info, in scrub_handle_errored_block()
1203 scrub_put_recover(fs_info, recover); in scrub_handle_errored_block()
1213 ret = unlock_full_stripe(fs_info, logical, full_stripe_locked); in scrub_handle_errored_block()
1264 struct btrfs_fs_info *fs_info = sctx->fs_info; in scrub_setup_recheck_block() local
1265 u64 length = original_sblock->page_count * fs_info->sectorsize; in scrub_setup_recheck_block()
1288 sublen = min_t(u64, length, fs_info->sectorsize); in scrub_setup_recheck_block()
1296 btrfs_bio_counter_inc_blocked(fs_info); in scrub_setup_recheck_block()
1297 ret = btrfs_map_sblock(fs_info, BTRFS_MAP_GET_READ_MIRRORS, in scrub_setup_recheck_block()
1301 btrfs_bio_counter_dec(fs_info); in scrub_setup_recheck_block()
1308 btrfs_bio_counter_dec(fs_info); in scrub_setup_recheck_block()
1334 scrub_put_recover(fs_info, recover); in scrub_setup_recheck_block()
1347 sctx->fs_info->csum_size); in scrub_setup_recheck_block()
1376 scrub_put_recover(fs_info, recover); in scrub_setup_recheck_block()
1390 static int scrub_submit_raid56_bio_wait(struct btrfs_fs_info *fs_info, in scrub_submit_raid56_bio_wait() argument
1413 static void scrub_recheck_block_on_raid56(struct btrfs_fs_info *fs_info, in scrub_recheck_block_on_raid56() argument
1435 if (scrub_submit_raid56_bio_wait(fs_info, bio, first_page)) { in scrub_recheck_block_on_raid56()
1459 static void scrub_recheck_block(struct btrfs_fs_info *fs_info, in scrub_recheck_block() argument
1469 return scrub_recheck_block_on_raid56(fs_info, sblock); in scrub_recheck_block()
1485 bio_add_page(bio, spage->page, fs_info->sectorsize, 0); in scrub_recheck_block()
1548 struct btrfs_fs_info *fs_info = sblock_bad->sctx->fs_info; in scrub_repair_page_from_good_copy() local
1549 const u32 sectorsize = fs_info->sectorsize; in scrub_repair_page_from_good_copy()
1559 btrfs_warn_rl(fs_info, in scrub_repair_page_from_good_copy()
1578 atomic64_inc(&fs_info->dev_replace.num_write_errors); in scrub_repair_page_from_good_copy()
1590 struct btrfs_fs_info *fs_info = sblock->sctx->fs_info; in scrub_write_block_to_dev_replace() local
1605 atomic64_inc(&fs_info->dev_replace.num_write_errors); in scrub_write_block_to_dev_replace()
1626 if (!btrfs_is_zoned(sctx->fs_info)) in fill_writer_pointer_gap()
1648 const u32 sectorsize = sctx->fs_info->sectorsize; in scrub_add_page_to_wr_bio()
1735 if (btrfs_is_zoned(sctx->fs_info)) in scrub_wr_submit()
1737 sctx->fs_info->sectorsize; in scrub_wr_submit()
1743 struct btrfs_fs_info *fs_info = sbio->dev->fs_info; in scrub_wr_bio_end_io() local
1749 btrfs_queue_work(fs_info->scrub_wr_completion_workers, &sbio->work); in scrub_wr_bio_end_io()
1761 &sbio->sctx->fs_info->dev_replace; in scrub_wr_bio_end_io_worker()
1816 struct btrfs_fs_info *fs_info = sctx->fs_info; in scrub_checksum_data() local
1817 SHASH_DESC_ON_STACK(shash, fs_info->csum_shash); in scrub_checksum_data()
1829 shash->tfm = fs_info->csum_shash; in scrub_checksum_data()
1836 crypto_shash_digest(shash, kaddr, fs_info->sectorsize, csum); in scrub_checksum_data()
1838 if (memcmp(csum, spage->csum, fs_info->csum_size)) in scrub_checksum_data()
1847 struct btrfs_fs_info *fs_info = sctx->fs_info; in scrub_checksum_tree_block() local
1848 SHASH_DESC_ON_STACK(shash, fs_info->csum_shash); in scrub_checksum_tree_block()
1856 const u32 sectorsize = sctx->fs_info->sectorsize; in scrub_checksum_tree_block()
1857 const int num_sectors = fs_info->nodesize >> fs_info->sectorsize_bits; in scrub_checksum_tree_block()
1870 memcpy(on_disk_csum, h->csum, sctx->fs_info->csum_size); in scrub_checksum_tree_block()
1888 if (memcmp(h->chunk_tree_uuid, fs_info->chunk_tree_uuid, in scrub_checksum_tree_block()
1892 shash->tfm = fs_info->csum_shash; in scrub_checksum_tree_block()
1903 if (memcmp(calculated_csum, on_disk_csum, sctx->fs_info->csum_size)) in scrub_checksum_tree_block()
1913 struct btrfs_fs_info *fs_info = sctx->fs_info; in scrub_checksum_super() local
1914 SHASH_DESC_ON_STACK(shash, fs_info->csum_shash); in scrub_checksum_super()
1935 shash->tfm = fs_info->csum_shash; in scrub_checksum_super()
1940 if (memcmp(calculated_csum, s->csum, sctx->fs_info->csum_size)) in scrub_checksum_super()
2075 const u32 sectorsize = sctx->fs_info->sectorsize; in scrub_add_page_to_rd_bio()
2147 struct btrfs_fs_info *fs_info = sblock->sctx->fs_info; in scrub_missing_raid56_end_io() local
2154 btrfs_queue_work(fs_info->scrub_workers, &sblock->work); in scrub_missing_raid56_end_io()
2161 struct btrfs_fs_info *fs_info = sctx->fs_info; in scrub_missing_raid56_worker() local
2175 btrfs_err_rl_in_rcu(fs_info, in scrub_missing_raid56_worker()
2182 btrfs_err_rl_in_rcu(fs_info, in scrub_missing_raid56_worker()
2202 struct btrfs_fs_info *fs_info = sctx->fs_info; in scrub_missing_raid56_pages() local
2211 btrfs_bio_counter_inc_blocked(fs_info); in scrub_missing_raid56_pages()
2212 ret = btrfs_map_sblock(fs_info, BTRFS_MAP_GET_READ_MIRRORS, logical, in scrub_missing_raid56_pages()
2252 btrfs_bio_counter_dec(fs_info); in scrub_missing_raid56_pages()
2265 const u32 sectorsize = sctx->fs_info->sectorsize; in scrub_pages()
2313 memcpy(spage->csum, csum, sctx->fs_info->csum_size); in scrub_pages()
2358 struct btrfs_fs_info *fs_info = sbio->dev->fs_info; in scrub_bio_end_io() local
2363 btrfs_queue_work(fs_info->scrub_workers, &sbio->work); in scrub_bio_end_io()
2414 u32 sectorsize_bits = sparity->sctx->fs_info->sectorsize_bits; in __scrub_mark_bitmap()
2468 sblock->sctx->fs_info->sectorsize; in scrub_block_complete()
2478 sctx->stat.csum_discards += sum->len >> sctx->fs_info->sectorsize_bits; in drop_csum_range()
2522 index = (logical - sum->bytenr) >> sctx->fs_info->sectorsize_bits; in scrub_find_csum()
2523 num_sectors = sum->len >> sctx->fs_info->sectorsize_bits; in scrub_find_csum()
2525 memcpy(csum, sum->sums + index * sctx->fs_info->csum_size, in scrub_find_csum()
2526 sctx->fs_info->csum_size); in scrub_find_csum()
2552 blocksize = sctx->fs_info->sectorsize; in scrub_extent()
2561 blocksize = sctx->fs_info->nodesize; in scrub_extent()
2567 blocksize = sctx->fs_info->sectorsize; in scrub_extent()
2601 const u32 sectorsize = sctx->fs_info->sectorsize; in scrub_pages_for_parity()
2650 memcpy(spage->csum, csum, sctx->fs_info->csum_size); in scrub_pages_for_parity()
2703 blocksize = sctx->fs_info->sectorsize; in scrub_extent_for_parity()
2809 struct btrfs_fs_info *fs_info = sparity->sctx->fs_info; in scrub_parity_bio_endio() local
2819 btrfs_queue_work(fs_info->scrub_parity_workers, &sparity->work); in scrub_parity_bio_endio()
2825 struct btrfs_fs_info *fs_info = sctx->fs_info; in scrub_parity_check_and_repair() local
2838 btrfs_bio_counter_inc_blocked(fs_info); in scrub_parity_check_and_repair()
2839 ret = btrfs_map_sblock(fs_info, BTRFS_MAP_WRITE, sparity->logic_start, in scrub_parity_check_and_repair()
2863 btrfs_bio_counter_dec(fs_info); in scrub_parity_check_and_repair()
2899 struct btrfs_fs_info *fs_info = sctx->fs_info; in scrub_raid56_parity() local
2900 struct btrfs_root *root = fs_info->extent_root; in scrub_raid56_parity()
2901 struct btrfs_root *csum_root = fs_info->csum_root; in scrub_raid56_parity()
2923 nsectors = map->stripe_len >> fs_info->sectorsize_bits; in scrub_raid56_parity()
2948 if (btrfs_fs_incompat(fs_info, SKINNY_METADATA)) in scrub_raid56_parity()
2995 bytes = fs_info->nodesize; in scrub_raid56_parity()
3019 btrfs_err(fs_info, in scrub_raid56_parity()
3047 ret = btrfs_map_block(fs_info, BTRFS_MAP_READ, in scrub_raid56_parity()
3125 if (!btrfs_is_zoned(sctx->fs_info)) in sync_replace_for_zoned()
3140 struct btrfs_fs_info *fs_info = sctx->fs_info; in sync_write_pointer_for_zoned() local
3143 if (!btrfs_is_zoned(fs_info)) in sync_write_pointer_for_zoned()
3154 btrfs_err(fs_info, in sync_write_pointer_for_zoned()
3170 struct btrfs_fs_info *fs_info = sctx->fs_info; in scrub_stripe() local
3171 struct btrfs_root *root = fs_info->extent_root; in scrub_stripe()
3172 struct btrfs_root *csum_root = fs_info->csum_root; in scrub_stripe()
3263 scrub_blocked_if_needed(fs_info); in scrub_stripe()
3314 if (atomic_read(&fs_info->scrub_cancel_req) || in scrub_stripe()
3322 if (atomic_read(&fs_info->scrub_pause_req)) { in scrub_stripe()
3332 scrub_blocked_if_needed(fs_info); in scrub_stripe()
3353 if (btrfs_fs_incompat(fs_info, SKINNY_METADATA)) in scrub_stripe()
3402 bytes = fs_info->nodesize; in scrub_stripe()
3439 btrfs_err(fs_info, in scrub_stripe()
3470 scrub_remap_extent(fs_info, extent_logical, in scrub_stripe()
3584 struct btrfs_fs_info *fs_info = sctx->fs_info; in scrub_chunk() local
3585 struct extent_map_tree *map_tree = &fs_info->mapping_tree; in scrub_chunk()
3633 struct btrfs_fs_info *fs_info = cache->fs_info; in finish_extent_writes_for_zoned() local
3636 if (!btrfs_is_zoned(fs_info)) in finish_extent_writes_for_zoned()
3641 btrfs_wait_ordered_roots(fs_info, U64_MAX, cache->start, cache->length); in finish_extent_writes_for_zoned()
3655 struct btrfs_fs_info *fs_info = sctx->fs_info; in scrub_enumerate_chunks() local
3656 struct btrfs_root *root = fs_info->dev_root; in scrub_enumerate_chunks()
3666 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; in scrub_enumerate_chunks()
3728 cache = btrfs_lookup_block_group(fs_info, chunk_offset); in scrub_enumerate_chunks()
3735 if (sctx->is_dev_replace && btrfs_is_zoned(fs_info)) { in scrub_enumerate_chunks()
3770 scrub_pause_on(fs_info); in scrub_enumerate_chunks()
3807 scrub_pause_off(fs_info); in scrub_enumerate_chunks()
3825 btrfs_warn(fs_info, in scrub_enumerate_chunks()
3828 scrub_pause_off(fs_info); in scrub_enumerate_chunks()
3832 btrfs_warn(fs_info, in scrub_enumerate_chunks()
3836 scrub_pause_off(fs_info); in scrub_enumerate_chunks()
3847 btrfs_wait_ordered_roots(fs_info, U64_MAX, cache->start, in scrub_enumerate_chunks()
3851 scrub_pause_off(fs_info); in scrub_enumerate_chunks()
3880 scrub_pause_on(fs_info); in scrub_enumerate_chunks()
3891 scrub_pause_off(fs_info); in scrub_enumerate_chunks()
3917 if (btrfs_test_opt(fs_info, DISCARD_ASYNC)) in scrub_enumerate_chunks()
3918 btrfs_discard_queue_work(&fs_info->discard_ctl, in scrub_enumerate_chunks()
3956 struct btrfs_fs_info *fs_info = sctx->fs_info; in scrub_supers() local
3958 if (BTRFS_FS_ERROR(fs_info)) in scrub_supers()
3962 if (scrub_dev->fs_devices != fs_info->fs_devices) in scrub_supers()
3965 gen = fs_info->last_trans_committed; in scrub_supers()
3986 static void scrub_workers_put(struct btrfs_fs_info *fs_info) in scrub_workers_put() argument
3988 if (refcount_dec_and_mutex_lock(&fs_info->scrub_workers_refcnt, in scrub_workers_put()
3989 &fs_info->scrub_lock)) { in scrub_workers_put()
3994 scrub_workers = fs_info->scrub_workers; in scrub_workers_put()
3995 scrub_wr_comp = fs_info->scrub_wr_completion_workers; in scrub_workers_put()
3996 scrub_parity = fs_info->scrub_parity_workers; in scrub_workers_put()
3998 fs_info->scrub_workers = NULL; in scrub_workers_put()
3999 fs_info->scrub_wr_completion_workers = NULL; in scrub_workers_put()
4000 fs_info->scrub_parity_workers = NULL; in scrub_workers_put()
4001 mutex_unlock(&fs_info->scrub_lock); in scrub_workers_put()
4012 static noinline_for_stack int scrub_workers_get(struct btrfs_fs_info *fs_info, in scrub_workers_get() argument
4019 int max_active = fs_info->thread_pool_size; in scrub_workers_get()
4022 if (refcount_inc_not_zero(&fs_info->scrub_workers_refcnt)) in scrub_workers_get()
4025 scrub_workers = btrfs_alloc_workqueue(fs_info, "scrub", flags, in scrub_workers_get()
4030 scrub_wr_comp = btrfs_alloc_workqueue(fs_info, "scrubwrc", flags, in scrub_workers_get()
4035 scrub_parity = btrfs_alloc_workqueue(fs_info, "scrubparity", flags, in scrub_workers_get()
4040 mutex_lock(&fs_info->scrub_lock); in scrub_workers_get()
4041 if (refcount_read(&fs_info->scrub_workers_refcnt) == 0) { in scrub_workers_get()
4042 ASSERT(fs_info->scrub_workers == NULL && in scrub_workers_get()
4043 fs_info->scrub_wr_completion_workers == NULL && in scrub_workers_get()
4044 fs_info->scrub_parity_workers == NULL); in scrub_workers_get()
4045 fs_info->scrub_workers = scrub_workers; in scrub_workers_get()
4046 fs_info->scrub_wr_completion_workers = scrub_wr_comp; in scrub_workers_get()
4047 fs_info->scrub_parity_workers = scrub_parity; in scrub_workers_get()
4048 refcount_set(&fs_info->scrub_workers_refcnt, 1); in scrub_workers_get()
4049 mutex_unlock(&fs_info->scrub_lock); in scrub_workers_get()
4053 refcount_inc(&fs_info->scrub_workers_refcnt); in scrub_workers_get()
4054 mutex_unlock(&fs_info->scrub_lock); in scrub_workers_get()
4066 int btrfs_scrub_dev(struct btrfs_fs_info *fs_info, u64 devid, u64 start, in btrfs_scrub_dev() argument
4076 if (btrfs_fs_closing(fs_info)) in btrfs_scrub_dev()
4079 if (fs_info->nodesize > BTRFS_STRIPE_LEN) { in btrfs_scrub_dev()
4085 btrfs_err(fs_info, in btrfs_scrub_dev()
4087 fs_info->nodesize, in btrfs_scrub_dev()
4092 if (fs_info->nodesize > in btrfs_scrub_dev()
4094 fs_info->sectorsize > PAGE_SIZE * SCRUB_MAX_PAGES_PER_BLOCK) { in btrfs_scrub_dev()
4099 btrfs_err(fs_info, in btrfs_scrub_dev()
4101 fs_info->nodesize, in btrfs_scrub_dev()
4103 fs_info->sectorsize, in btrfs_scrub_dev()
4109 sctx = scrub_setup_ctx(fs_info, is_dev_replace); in btrfs_scrub_dev()
4113 ret = scrub_workers_get(fs_info, is_dev_replace); in btrfs_scrub_dev()
4117 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
4118 dev = btrfs_find_device(fs_info->fs_devices, &args); in btrfs_scrub_dev()
4121 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
4128 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
4129 btrfs_err_in_rcu(fs_info, in btrfs_scrub_dev()
4136 mutex_lock(&fs_info->scrub_lock); in btrfs_scrub_dev()
4139 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_dev()
4140 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
4145 down_read(&fs_info->dev_replace.rwsem); in btrfs_scrub_dev()
4148 btrfs_dev_replace_is_ongoing(&fs_info->dev_replace))) { in btrfs_scrub_dev()
4149 up_read(&fs_info->dev_replace.rwsem); in btrfs_scrub_dev()
4150 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_dev()
4151 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
4155 up_read(&fs_info->dev_replace.rwsem); in btrfs_scrub_dev()
4159 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
4165 __scrub_blocked_if_needed(fs_info); in btrfs_scrub_dev()
4166 atomic_inc(&fs_info->scrubs_running); in btrfs_scrub_dev()
4167 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_dev()
4180 btrfs_info(fs_info, "scrub: started on devid %llu", devid); in btrfs_scrub_dev()
4185 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
4187 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_dev()
4195 atomic_dec(&fs_info->scrubs_running); in btrfs_scrub_dev()
4196 wake_up(&fs_info->scrub_pause_wait); in btrfs_scrub_dev()
4204 btrfs_info(fs_info, "scrub: %s on devid %llu with status: %d", in btrfs_scrub_dev()
4207 mutex_lock(&fs_info->scrub_lock); in btrfs_scrub_dev()
4209 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_dev()
4211 scrub_workers_put(fs_info); in btrfs_scrub_dev()
4216 scrub_workers_put(fs_info); in btrfs_scrub_dev()
4223 void btrfs_scrub_pause(struct btrfs_fs_info *fs_info) in btrfs_scrub_pause() argument
4225 mutex_lock(&fs_info->scrub_lock); in btrfs_scrub_pause()
4226 atomic_inc(&fs_info->scrub_pause_req); in btrfs_scrub_pause()
4227 while (atomic_read(&fs_info->scrubs_paused) != in btrfs_scrub_pause()
4228 atomic_read(&fs_info->scrubs_running)) { in btrfs_scrub_pause()
4229 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_pause()
4230 wait_event(fs_info->scrub_pause_wait, in btrfs_scrub_pause()
4231 atomic_read(&fs_info->scrubs_paused) == in btrfs_scrub_pause()
4232 atomic_read(&fs_info->scrubs_running)); in btrfs_scrub_pause()
4233 mutex_lock(&fs_info->scrub_lock); in btrfs_scrub_pause()
4235 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_pause()
4238 void btrfs_scrub_continue(struct btrfs_fs_info *fs_info) in btrfs_scrub_continue() argument
4240 atomic_dec(&fs_info->scrub_pause_req); in btrfs_scrub_continue()
4241 wake_up(&fs_info->scrub_pause_wait); in btrfs_scrub_continue()
4244 int btrfs_scrub_cancel(struct btrfs_fs_info *fs_info) in btrfs_scrub_cancel() argument
4246 mutex_lock(&fs_info->scrub_lock); in btrfs_scrub_cancel()
4247 if (!atomic_read(&fs_info->scrubs_running)) { in btrfs_scrub_cancel()
4248 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_cancel()
4252 atomic_inc(&fs_info->scrub_cancel_req); in btrfs_scrub_cancel()
4253 while (atomic_read(&fs_info->scrubs_running)) { in btrfs_scrub_cancel()
4254 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_cancel()
4255 wait_event(fs_info->scrub_pause_wait, in btrfs_scrub_cancel()
4256 atomic_read(&fs_info->scrubs_running) == 0); in btrfs_scrub_cancel()
4257 mutex_lock(&fs_info->scrub_lock); in btrfs_scrub_cancel()
4259 atomic_dec(&fs_info->scrub_cancel_req); in btrfs_scrub_cancel()
4260 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_cancel()
4267 struct btrfs_fs_info *fs_info = dev->fs_info; in btrfs_scrub_cancel_dev() local
4270 mutex_lock(&fs_info->scrub_lock); in btrfs_scrub_cancel_dev()
4273 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_cancel_dev()
4278 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_cancel_dev()
4279 wait_event(fs_info->scrub_pause_wait, in btrfs_scrub_cancel_dev()
4281 mutex_lock(&fs_info->scrub_lock); in btrfs_scrub_cancel_dev()
4283 mutex_unlock(&fs_info->scrub_lock); in btrfs_scrub_cancel_dev()
4288 int btrfs_scrub_progress(struct btrfs_fs_info *fs_info, u64 devid, in btrfs_scrub_progress() argument
4295 mutex_lock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_progress()
4296 dev = btrfs_find_device(fs_info->fs_devices, &args); in btrfs_scrub_progress()
4301 mutex_unlock(&fs_info->fs_devices->device_list_mutex); in btrfs_scrub_progress()
4306 static void scrub_remap_extent(struct btrfs_fs_info *fs_info, in scrub_remap_extent() argument
4317 ret = btrfs_map_block(fs_info, BTRFS_MAP_READ, extent_logical, in scrub_remap_extent()