Lines Matching refs:wc
4578 struct walk_control *wc, in reada_walk_down() argument
4593 if (path->slots[wc->level] < wc->reada_slot) { in reada_walk_down()
4594 wc->reada_count = wc->reada_count * 2 / 3; in reada_walk_down()
4595 wc->reada_count = max(wc->reada_count, 2); in reada_walk_down()
4597 wc->reada_count = wc->reada_count * 3 / 2; in reada_walk_down()
4598 wc->reada_count = min_t(int, wc->reada_count, in reada_walk_down()
4602 eb = path->nodes[wc->level]; in reada_walk_down()
4605 for (slot = path->slots[wc->level]; slot < nritems; slot++) { in reada_walk_down()
4606 if (nread >= wc->reada_count) in reada_walk_down()
4613 if (slot == path->slots[wc->level]) in reada_walk_down()
4616 if (wc->stage == UPDATE_BACKREF && in reada_walk_down()
4622 wc->level - 1, 1, &refs, in reada_walk_down()
4629 if (wc->stage == DROP_REFERENCE) { in reada_walk_down()
4633 if (wc->level == 1 && in reada_walk_down()
4636 if (!wc->update_ref || in reada_walk_down()
4641 &wc->update_progress); in reada_walk_down()
4645 if (wc->level == 1 && in reada_walk_down()
4653 wc->reada_slot = slot; in reada_walk_down()
4667 struct walk_control *wc, int lookup_info) in walk_down_proc() argument
4670 int level = wc->level; in walk_down_proc()
4675 if (wc->stage == UPDATE_BACKREF && in walk_down_proc()
4684 ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) || in walk_down_proc()
4685 (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) { in walk_down_proc()
4689 &wc->refs[level], in walk_down_proc()
4690 &wc->flags[level]); in walk_down_proc()
4694 BUG_ON(wc->refs[level] == 0); in walk_down_proc()
4697 if (wc->stage == DROP_REFERENCE) { in walk_down_proc()
4698 if (wc->refs[level] > 1) in walk_down_proc()
4701 if (path->locks[level] && !wc->keep_locks) { in walk_down_proc()
4709 if (!(wc->flags[level] & flag)) { in walk_down_proc()
4719 wc->flags[level] |= flag; in walk_down_proc()
4776 struct walk_control *wc, int *lookup_info) in do_walk_down() argument
4786 int level = wc->level; in do_walk_down()
4798 if (wc->stage == UPDATE_BACKREF && in do_walk_down()
4822 &wc->refs[level - 1], in do_walk_down()
4823 &wc->flags[level - 1]); in do_walk_down()
4827 if (unlikely(wc->refs[level - 1] == 0)) { in do_walk_down()
4834 if (wc->stage == DROP_REFERENCE) { in do_walk_down()
4835 if (wc->refs[level - 1] > 1) { in do_walk_down()
4838 (wc->flags[0] & BTRFS_BLOCK_FLAG_FULL_BACKREF)) in do_walk_down()
4841 if (!wc->update_ref || in do_walk_down()
4847 ret = btrfs_comp_cpu_keys(&key, &wc->update_progress); in do_walk_down()
4851 wc->stage = UPDATE_BACKREF; in do_walk_down()
4852 wc->shared_level = level - 1; in do_walk_down()
4856 (wc->flags[0] & BTRFS_BLOCK_FLAG_FULL_BACKREF)) in do_walk_down()
4869 reada_walk_down(trans, root, wc, path); in do_walk_down()
4892 wc->level = level; in do_walk_down()
4893 if (wc->level == 1) in do_walk_down()
4894 wc->reada_slot = 0; in do_walk_down()
4897 wc->refs[level - 1] = 0; in do_walk_down()
4898 wc->flags[level - 1] = 0; in do_walk_down()
4899 if (wc->stage == DROP_REFERENCE) { in do_walk_down()
4900 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) { in do_walk_down()
4921 if (wc->restarted) { in do_walk_down()
4929 wc->restarted = 0; in do_walk_down()
4954 wc->drop_level = level; in do_walk_down()
4955 find_next_key(path, level, &wc->drop_progress); in do_walk_down()
4990 struct walk_control *wc) in walk_up_proc() argument
4994 int level = wc->level; in walk_up_proc()
4998 if (wc->stage == UPDATE_BACKREF) { in walk_up_proc()
4999 BUG_ON(wc->shared_level < level); in walk_up_proc()
5000 if (level < wc->shared_level) in walk_up_proc()
5003 ret = find_next_key(path, level + 1, &wc->update_progress); in walk_up_proc()
5005 wc->update_ref = 0; in walk_up_proc()
5007 wc->stage = DROP_REFERENCE; in walk_up_proc()
5008 wc->shared_level = -1; in walk_up_proc()
5024 &wc->refs[level], in walk_up_proc()
5025 &wc->flags[level]); in walk_up_proc()
5031 BUG_ON(wc->refs[level] == 0); in walk_up_proc()
5032 if (wc->refs[level] == 1) { in walk_up_proc()
5041 BUG_ON(wc->refs[level] > 1 && !path->locks[level]); in walk_up_proc()
5043 if (wc->refs[level] == 1) { in walk_up_proc()
5045 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
5070 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
5075 if (wc->flags[level + 1] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
5082 btrfs_free_tree_block(trans, root, eb, parent, wc->refs[level] == 1); in walk_up_proc()
5084 wc->refs[level] = 0; in walk_up_proc()
5085 wc->flags[level] = 0; in walk_up_proc()
5097 struct walk_control *wc) in walk_down_tree() argument
5099 int level = wc->level; in walk_down_tree()
5104 ret = walk_down_proc(trans, root, path, wc, lookup_info); in walk_down_tree()
5115 ret = do_walk_down(trans, root, path, wc, &lookup_info); in walk_down_tree()
5121 level = wc->level; in walk_down_tree()
5129 struct walk_control *wc, int max_level) in walk_up_tree() argument
5131 int level = wc->level; in walk_up_tree()
5136 wc->level = level; in walk_up_tree()
5142 ret = walk_up_proc(trans, root, path, wc); in walk_up_tree()
5183 struct walk_control *wc; in btrfs_drop_snapshot() local
5198 wc = kzalloc(sizeof(*wc), GFP_NOFS); in btrfs_drop_snapshot()
5199 if (!wc) { in btrfs_drop_snapshot()
5233 memset(&wc->update_progress, 0, in btrfs_drop_snapshot()
5234 sizeof(wc->update_progress)); in btrfs_drop_snapshot()
5237 memcpy(&wc->update_progress, &key, in btrfs_drop_snapshot()
5238 sizeof(wc->update_progress)); in btrfs_drop_snapshot()
5265 level, 1, &wc->refs[level], in btrfs_drop_snapshot()
5266 &wc->flags[level]); in btrfs_drop_snapshot()
5271 BUG_ON(wc->refs[level] == 0); in btrfs_drop_snapshot()
5278 WARN_ON(wc->refs[level] != 1); in btrfs_drop_snapshot()
5283 wc->restarted = test_bit(BTRFS_ROOT_DEAD_TREE, &root->state); in btrfs_drop_snapshot()
5284 wc->level = level; in btrfs_drop_snapshot()
5285 wc->shared_level = -1; in btrfs_drop_snapshot()
5286 wc->stage = DROP_REFERENCE; in btrfs_drop_snapshot()
5287 wc->update_ref = update_ref; in btrfs_drop_snapshot()
5288 wc->keep_locks = 0; in btrfs_drop_snapshot()
5289 wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(fs_info); in btrfs_drop_snapshot()
5293 ret = walk_down_tree(trans, root, path, wc); in btrfs_drop_snapshot()
5299 ret = walk_up_tree(trans, root, path, wc, BTRFS_MAX_LEVEL); in btrfs_drop_snapshot()
5306 BUG_ON(wc->stage != DROP_REFERENCE); in btrfs_drop_snapshot()
5310 if (wc->stage == DROP_REFERENCE) { in btrfs_drop_snapshot()
5311 wc->drop_level = wc->level; in btrfs_drop_snapshot()
5312 btrfs_node_key_to_cpu(path->nodes[wc->drop_level], in btrfs_drop_snapshot()
5313 &wc->drop_progress, in btrfs_drop_snapshot()
5314 path->slots[wc->drop_level]); in btrfs_drop_snapshot()
5317 &wc->drop_progress); in btrfs_drop_snapshot()
5318 root_item->drop_level = wc->drop_level; in btrfs_drop_snapshot()
5320 BUG_ON(wc->level == 0); in btrfs_drop_snapshot()
5389 kfree(wc); in btrfs_drop_snapshot()
5419 struct walk_control *wc; in btrfs_drop_subtree() local
5431 wc = kzalloc(sizeof(*wc), GFP_NOFS); in btrfs_drop_subtree()
5432 if (!wc) { in btrfs_drop_subtree()
5449 wc->refs[parent_level] = 1; in btrfs_drop_subtree()
5450 wc->flags[parent_level] = BTRFS_BLOCK_FLAG_FULL_BACKREF; in btrfs_drop_subtree()
5451 wc->level = level; in btrfs_drop_subtree()
5452 wc->shared_level = -1; in btrfs_drop_subtree()
5453 wc->stage = DROP_REFERENCE; in btrfs_drop_subtree()
5454 wc->update_ref = 0; in btrfs_drop_subtree()
5455 wc->keep_locks = 1; in btrfs_drop_subtree()
5456 wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(fs_info); in btrfs_drop_subtree()
5459 wret = walk_down_tree(trans, root, path, wc); in btrfs_drop_subtree()
5465 wret = walk_up_tree(trans, root, path, wc, parent_level); in btrfs_drop_subtree()
5472 kfree(wc); in btrfs_drop_subtree()