Lines Matching refs:fs_info

82 	struct btrfs_fs_info	*fs_info;  member
88 static void reada_start_machine(struct btrfs_fs_info *fs_info);
89 static void __reada_start_machine(struct btrfs_fs_info *fs_info);
97 static void __readahead_hook(struct btrfs_fs_info *fs_info, in __readahead_hook() argument
162 btrfs_debug(fs_info, in __readahead_hook()
197 reada_extent_put(fs_info, re); /* one ref for each entry */ in __readahead_hook()
205 struct btrfs_fs_info *fs_info = eb->fs_info; in btree_readahead_hook() local
210 spin_lock(&fs_info->reada_lock); in btree_readahead_hook()
211 re = radix_tree_lookup(&fs_info->reada_tree, in btree_readahead_hook()
212 eb->start >> fs_info->sectorsize_bits); in btree_readahead_hook()
215 spin_unlock(&fs_info->reada_lock); in btree_readahead_hook()
221 __readahead_hook(fs_info, re, eb, err); in btree_readahead_hook()
222 reada_extent_put(fs_info, re); /* our ref */ in btree_readahead_hook()
225 reada_start_machine(fs_info); in btree_readahead_hook()
232 struct btrfs_fs_info *fs_info = dev->fs_info; in reada_find_zone() local
241 spin_lock(&fs_info->reada_lock); in reada_find_zone()
243 logical >> fs_info->sectorsize_bits, 1); in reada_find_zone()
246 spin_unlock(&fs_info->reada_lock); in reada_find_zone()
250 spin_unlock(&fs_info->reada_lock); in reada_find_zone()
252 cache = btrfs_lookup_block_group(fs_info, logical); in reada_find_zone()
284 spin_lock(&fs_info->reada_lock); in reada_find_zone()
286 (unsigned long)(zone->end >> fs_info->sectorsize_bits), in reada_find_zone()
292 logical >> fs_info->sectorsize_bits, 1); in reada_find_zone()
298 spin_unlock(&fs_info->reada_lock); in reada_find_zone()
304 static struct reada_extent *reada_find_extent(struct btrfs_fs_info *fs_info, in reada_find_extent() argument
318 unsigned long index = logical >> fs_info->sectorsize_bits; in reada_find_extent()
322 spin_lock(&fs_info->reada_lock); in reada_find_extent()
323 re = radix_tree_lookup(&fs_info->reada_tree, index); in reada_find_extent()
326 spin_unlock(&fs_info->reada_lock); in reada_find_extent()
346 length = fs_info->nodesize; in reada_find_extent()
347 ret = btrfs_map_block(fs_info, BTRFS_MAP_GET_READ_MIRRORS, logical, in reada_find_extent()
349 if (ret || !bioc || length < fs_info->nodesize) in reada_find_extent()
353 btrfs_err(fs_info, in reada_find_extent()
379 spin_lock(&fs_info->reada_lock); in reada_find_extent()
381 spin_unlock(&fs_info->reada_lock); in reada_find_extent()
389 down_read(&fs_info->dev_replace.rwsem); in reada_find_extent()
392 up_read(&fs_info->dev_replace.rwsem); in reada_find_extent()
396 spin_lock(&fs_info->reada_lock); in reada_find_extent()
397 ret = radix_tree_insert(&fs_info->reada_tree, index, re); in reada_find_extent()
399 re_exist = radix_tree_lookup(&fs_info->reada_tree, index); in reada_find_extent()
401 spin_unlock(&fs_info->reada_lock); in reada_find_extent()
403 up_read(&fs_info->dev_replace.rwsem); in reada_find_extent()
407 spin_unlock(&fs_info->reada_lock); in reada_find_extent()
409 up_read(&fs_info->dev_replace.rwsem); in reada_find_extent()
415 &fs_info->dev_replace); in reada_find_extent()
436 dev == fs_info->dev_replace.tgtdev) { in reada_find_extent()
452 radix_tree_delete(&fs_info->reada_tree, index); in reada_find_extent()
453 spin_unlock(&fs_info->reada_lock); in reada_find_extent()
454 up_read(&fs_info->dev_replace.rwsem); in reada_find_extent()
460 radix_tree_delete(&fs_info->reada_tree, index); in reada_find_extent()
461 spin_unlock(&fs_info->reada_lock); in reada_find_extent()
462 up_read(&fs_info->dev_replace.rwsem); in reada_find_extent()
487 spin_lock(&fs_info->reada_lock); in reada_find_extent()
489 spin_unlock(&fs_info->reada_lock); in reada_find_extent()
496 static void reada_extent_put(struct btrfs_fs_info *fs_info, in reada_extent_put() argument
500 unsigned long index = re->logical >> fs_info->sectorsize_bits; in reada_extent_put()
502 spin_lock(&fs_info->reada_lock); in reada_extent_put()
504 spin_unlock(&fs_info->reada_lock); in reada_extent_put()
508 radix_tree_delete(&fs_info->reada_tree, index); in reada_extent_put()
515 spin_unlock(&fs_info->reada_lock); in reada_extent_put()
530 spin_lock(&fs_info->reada_lock); in reada_extent_put()
532 spin_unlock(&fs_info->reada_lock); in reada_extent_put()
541 struct btrfs_fs_info *fs_info = zone->device->fs_info; in reada_zone_release() local
543 lockdep_assert_held(&fs_info->reada_lock); in reada_zone_release()
546 zone->end >> fs_info->sectorsize_bits); in reada_zone_release()
563 struct btrfs_fs_info *fs_info = rc->fs_info; in reada_add_block() local
568 re = reada_find_extent(fs_info, logical, top, owner_root, level); in reada_add_block()
574 reada_extent_put(fs_info, re); in reada_add_block()
597 unsigned long index = zone->end >> zone->device->fs_info->sectorsize_bits; in reada_peer_zones_set_lock()
632 index = (zone->end >> dev->fs_info->sectorsize_bits) + 1; in reada_pick_zone()
659 static int reada_tree_block_flagged(struct btrfs_fs_info *fs_info, u64 bytenr, in reada_tree_block_flagged() argument
666 buf = btrfs_find_create_tree_block(fs_info, bytenr, owner_root, level); in reada_tree_block_flagged()
691 struct btrfs_fs_info *fs_info = dev->fs_info; in reada_start_machine_dev() local
699 spin_lock(&fs_info->reada_lock); in reada_start_machine_dev()
703 spin_unlock(&fs_info->reada_lock); in reada_start_machine_dev()
713 dev->reada_next >> fs_info->sectorsize_bits, 1); in reada_start_machine_dev()
717 spin_unlock(&fs_info->reada_lock); in reada_start_machine_dev()
722 dev->reada_next >> fs_info->sectorsize_bits, 1); in reada_start_machine_dev()
725 spin_unlock(&fs_info->reada_lock); in reada_start_machine_dev()
728 dev->reada_next = re->logical + fs_info->nodesize; in reada_start_machine_dev()
731 spin_unlock(&fs_info->reada_lock); in reada_start_machine_dev()
736 reada_extent_put(fs_info, re); in reada_start_machine_dev()
754 ret = reada_tree_block_flagged(fs_info, logical, re->owner_root, in reada_start_machine_dev()
757 __readahead_hook(fs_info, re, NULL, ret); in reada_start_machine_dev()
759 __readahead_hook(fs_info, re, eb, ret); in reada_start_machine_dev()
765 reada_extent_put(fs_info, re); in reada_start_machine_dev()
781 __reada_start_machine(rmw->fs_info); in reada_start_machine_worker()
784 atomic_dec(&rmw->fs_info->reada_works_cnt); in reada_start_machine_worker()
809 static void __reada_start_machine(struct btrfs_fs_info *fs_info) in __reada_start_machine() argument
811 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices, *seed_devs; in __reada_start_machine()
833 reada_start_machine(fs_info); in __reada_start_machine()
834 if (atomic_read(&fs_info->reada_works_cnt) > in __reada_start_machine()
840 static void reada_start_machine(struct btrfs_fs_info *fs_info) in reada_start_machine() argument
850 rmw->fs_info = fs_info; in reada_start_machine()
852 btrfs_queue_work(fs_info->readahead_workers, &rmw->work); in reada_start_machine()
853 atomic_inc(&fs_info->reada_works_cnt); in reada_start_machine()
857 static void dump_devs(struct btrfs_fs_info *fs_info, int all) in dump_devs() argument
860 struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; in dump_devs()
867 spin_lock(&fs_info->reada_lock); in dump_devs()
869 btrfs_debug(fs_info, "dev %lld has %d in flight", device->devid, in dump_devs()
889 index = (zone->end >> fs_info->sectorsize_bits) + 1; in dump_devs()
901 re->logical, fs_info->nodesize, in dump_devs()
914 index = (re->logical >> fs_info->sectorsize_bits) + 1; in dump_devs()
925 ret = radix_tree_gang_lookup(&fs_info->reada_tree, (void **)&re, in dump_devs()
930 index = (re->logical >> fs_info->sectorsize_bits) + 1; in dump_devs()
934 re->logical, fs_info->nodesize, in dump_devs()
946 index = (re->logical >> fs_info->sectorsize_bits) + 1; in dump_devs()
948 spin_unlock(&fs_info->reada_lock); in dump_devs()
974 rc->fs_info = root->fs_info; in btrfs_reada_add()
995 reada_start_machine(root->fs_info); in btrfs_reada_add()
1004 struct btrfs_fs_info *fs_info = rc->fs_info; in btrfs_reada_wait() local
1007 if (!atomic_read(&fs_info->reada_works_cnt)) in btrfs_reada_wait()
1008 reada_start_machine(fs_info); in btrfs_reada_wait()
1011 dump_devs(fs_info, atomic_read(&rc->elems) < 10 ? 1 : 0); in btrfs_reada_wait()
1014 dump_devs(fs_info, atomic_read(&rc->elems) < 10 ? 1 : 0); in btrfs_reada_wait()
1024 struct btrfs_fs_info *fs_info = rc->fs_info; in btrfs_reada_wait() local
1027 if (!atomic_read(&fs_info->reada_works_cnt)) in btrfs_reada_wait()
1028 reada_start_machine(fs_info); in btrfs_reada_wait()
1056 struct btrfs_fs_info *fs_info = dev->fs_info; in btrfs_reada_remove_dev() local
1059 spin_lock(&fs_info->reada_lock); in btrfs_reada_remove_dev()
1061 spin_unlock(&fs_info->reada_lock); in btrfs_reada_remove_dev()
1071 reada_start_machine(fs_info); in btrfs_reada_remove_dev()
1072 btrfs_flush_workqueue(fs_info->readahead_workers); in btrfs_reada_remove_dev()
1083 spin_lock(&dev->fs_info->reada_lock); in btrfs_reada_undo_remove_dev()
1085 spin_unlock(&dev->fs_info->reada_lock); in btrfs_reada_undo_remove_dev()