• Home
  • Raw
  • Download

Lines Matching full:wc

4751 				     struct walk_control *wc,  in reada_walk_down()  argument
4766 if (path->slots[wc->level] < wc->reada_slot) { in reada_walk_down()
4767 wc->reada_count = wc->reada_count * 2 / 3; in reada_walk_down()
4768 wc->reada_count = max(wc->reada_count, 2); in reada_walk_down()
4770 wc->reada_count = wc->reada_count * 3 / 2; in reada_walk_down()
4771 wc->reada_count = min_t(int, wc->reada_count, in reada_walk_down()
4775 eb = path->nodes[wc->level]; in reada_walk_down()
4778 for (slot = path->slots[wc->level]; slot < nritems; slot++) { in reada_walk_down()
4779 if (nread >= wc->reada_count) in reada_walk_down()
4786 if (slot == path->slots[wc->level]) in reada_walk_down()
4789 if (wc->stage == UPDATE_BACKREF && in reada_walk_down()
4795 wc->level - 1, 1, &refs, in reada_walk_down()
4802 if (wc->stage == DROP_REFERENCE) { in reada_walk_down()
4806 if (wc->level == 1 && in reada_walk_down()
4809 if (!wc->update_ref || in reada_walk_down()
4814 &wc->update_progress); in reada_walk_down()
4818 if (wc->level == 1 && in reada_walk_down()
4826 wc->reada_slot = slot; in reada_walk_down()
4832 * when wc->stage == UPDATE_BACKREF, this function updates
4840 struct walk_control *wc, int lookup_info) in walk_down_proc() argument
4843 int level = wc->level; in walk_down_proc()
4848 if (wc->stage == UPDATE_BACKREF && in walk_down_proc()
4857 ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) || in walk_down_proc()
4858 (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) { in walk_down_proc()
4862 &wc->refs[level], in walk_down_proc()
4863 &wc->flags[level]); in walk_down_proc()
4867 BUG_ON(wc->refs[level] == 0); in walk_down_proc()
4870 if (wc->stage == DROP_REFERENCE) { in walk_down_proc()
4871 if (wc->refs[level] > 1) in walk_down_proc()
4874 if (path->locks[level] && !wc->keep_locks) { in walk_down_proc()
4881 /* wc->stage == UPDATE_BACKREF */ in walk_down_proc()
4882 if (!(wc->flags[level] & flag)) { in walk_down_proc()
4891 wc->flags[level] |= flag; in walk_down_proc()
4935 * when wc->stage == DROP_REFERENCE, this function checks
4938 * rooted at the block, this function changes wc->stage to
4948 struct walk_control *wc, int *lookup_info) in do_walk_down() argument
4958 int level = wc->level; in do_walk_down()
4970 if (wc->stage == UPDATE_BACKREF && in do_walk_down()
4994 &wc->refs[level - 1], in do_walk_down()
4995 &wc->flags[level - 1]); in do_walk_down()
4999 if (unlikely(wc->refs[level - 1] == 0)) { in do_walk_down()
5006 if (wc->stage == DROP_REFERENCE) { in do_walk_down()
5007 if (wc->refs[level - 1] > 1) { in do_walk_down()
5010 (wc->flags[0] & BTRFS_BLOCK_FLAG_FULL_BACKREF)) in do_walk_down()
5013 if (!wc->update_ref || in do_walk_down()
5019 ret = btrfs_comp_cpu_keys(&key, &wc->update_progress); in do_walk_down()
5023 wc->stage = UPDATE_BACKREF; in do_walk_down()
5024 wc->shared_level = level - 1; in do_walk_down()
5028 (wc->flags[0] & BTRFS_BLOCK_FLAG_FULL_BACKREF)) in do_walk_down()
5041 reada_walk_down(trans, root, wc, path); in do_walk_down()
5064 wc->level = level; in do_walk_down()
5065 if (wc->level == 1) in do_walk_down()
5066 wc->reada_slot = 0; in do_walk_down()
5069 wc->refs[level - 1] = 0; in do_walk_down()
5070 wc->flags[level - 1] = 0; in do_walk_down()
5071 if (wc->stage == DROP_REFERENCE) { in do_walk_down()
5072 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) { in do_walk_down()
5093 if (wc->restarted) { in do_walk_down()
5101 wc->restarted = 0; in do_walk_down()
5126 wc->drop_level = level; in do_walk_down()
5127 find_next_key(path, level, &wc->drop_progress); in do_walk_down()
5150 * when wc->stage == DROP_REFERENCE, this function drops
5153 * when wc->stage == UPDATE_BACKREF, this function changes
5154 * wc->stage back to DROP_REFERENCE if we changed wc->stage
5162 struct walk_control *wc) in walk_up_proc() argument
5166 int level = wc->level; in walk_up_proc()
5170 if (wc->stage == UPDATE_BACKREF) { in walk_up_proc()
5171 BUG_ON(wc->shared_level < level); in walk_up_proc()
5172 if (level < wc->shared_level) in walk_up_proc()
5175 ret = find_next_key(path, level + 1, &wc->update_progress); in walk_up_proc()
5177 wc->update_ref = 0; in walk_up_proc()
5179 wc->stage = DROP_REFERENCE; in walk_up_proc()
5180 wc->shared_level = -1; in walk_up_proc()
5196 &wc->refs[level], in walk_up_proc()
5197 &wc->flags[level]); in walk_up_proc()
5203 BUG_ON(wc->refs[level] == 0); in walk_up_proc()
5204 if (wc->refs[level] == 1) { in walk_up_proc()
5212 /* wc->stage == DROP_REFERENCE */ in walk_up_proc()
5213 BUG_ON(wc->refs[level] > 1 && !path->locks[level]); in walk_up_proc()
5215 if (wc->refs[level] == 1) { in walk_up_proc()
5217 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
5242 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
5247 if (wc->flags[level + 1] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
5254 btrfs_free_tree_block(trans, root, eb, parent, wc->refs[level] == 1); in walk_up_proc()
5256 wc->refs[level] = 0; in walk_up_proc()
5257 wc->flags[level] = 0; in walk_up_proc()
5269 struct walk_control *wc) in walk_down_tree() argument
5271 int level = wc->level; in walk_down_tree()
5276 ret = walk_down_proc(trans, root, path, wc, lookup_info); in walk_down_tree()
5287 ret = do_walk_down(trans, root, path, wc, &lookup_info); in walk_down_tree()
5293 level = wc->level; in walk_down_tree()
5301 struct walk_control *wc, int max_level) in walk_up_tree() argument
5303 int level = wc->level; in walk_up_tree()
5308 wc->level = level; in walk_up_tree()
5314 ret = walk_up_proc(trans, root, path, wc); in walk_up_tree()
5353 struct walk_control *wc; in btrfs_drop_snapshot() local
5368 wc = kzalloc(sizeof(*wc), GFP_NOFS); in btrfs_drop_snapshot()
5369 if (!wc) { in btrfs_drop_snapshot()
5407 memset(&wc->update_progress, 0, in btrfs_drop_snapshot()
5408 sizeof(wc->update_progress)); in btrfs_drop_snapshot()
5411 memcpy(&wc->update_progress, &key, in btrfs_drop_snapshot()
5412 sizeof(wc->update_progress)); in btrfs_drop_snapshot()
5439 level, 1, &wc->refs[level], in btrfs_drop_snapshot()
5440 &wc->flags[level]); in btrfs_drop_snapshot()
5445 BUG_ON(wc->refs[level] == 0); in btrfs_drop_snapshot()
5452 WARN_ON(wc->refs[level] != 1); in btrfs_drop_snapshot()
5457 wc->restarted = test_bit(BTRFS_ROOT_DEAD_TREE, &root->state); in btrfs_drop_snapshot()
5458 wc->level = level; in btrfs_drop_snapshot()
5459 wc->shared_level = -1; in btrfs_drop_snapshot()
5460 wc->stage = DROP_REFERENCE; in btrfs_drop_snapshot()
5461 wc->update_ref = update_ref; in btrfs_drop_snapshot()
5462 wc->keep_locks = 0; in btrfs_drop_snapshot()
5463 wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(fs_info); in btrfs_drop_snapshot()
5467 ret = walk_down_tree(trans, root, path, wc); in btrfs_drop_snapshot()
5473 ret = walk_up_tree(trans, root, path, wc, BTRFS_MAX_LEVEL); in btrfs_drop_snapshot()
5480 BUG_ON(wc->stage != DROP_REFERENCE); in btrfs_drop_snapshot()
5484 if (wc->stage == DROP_REFERENCE) { in btrfs_drop_snapshot()
5485 wc->drop_level = wc->level; in btrfs_drop_snapshot()
5486 btrfs_node_key_to_cpu(path->nodes[wc->drop_level], in btrfs_drop_snapshot()
5487 &wc->drop_progress, in btrfs_drop_snapshot()
5488 path->slots[wc->drop_level]); in btrfs_drop_snapshot()
5491 &wc->drop_progress); in btrfs_drop_snapshot()
5492 root_item->drop_level = wc->drop_level; in btrfs_drop_snapshot()
5494 BUG_ON(wc->level == 0); in btrfs_drop_snapshot()
5574 kfree(wc); in btrfs_drop_snapshot()
5602 struct walk_control *wc; in btrfs_drop_subtree() local
5614 wc = kzalloc(sizeof(*wc), GFP_NOFS); in btrfs_drop_subtree()
5615 if (!wc) { in btrfs_drop_subtree()
5632 wc->refs[parent_level] = 1; in btrfs_drop_subtree()
5633 wc->flags[parent_level] = BTRFS_BLOCK_FLAG_FULL_BACKREF; in btrfs_drop_subtree()
5634 wc->level = level; in btrfs_drop_subtree()
5635 wc->shared_level = -1; in btrfs_drop_subtree()
5636 wc->stage = DROP_REFERENCE; in btrfs_drop_subtree()
5637 wc->update_ref = 0; in btrfs_drop_subtree()
5638 wc->keep_locks = 1; in btrfs_drop_subtree()
5639 wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(fs_info); in btrfs_drop_subtree()
5642 wret = walk_down_tree(trans, root, path, wc); in btrfs_drop_subtree()
5648 wret = walk_up_tree(trans, root, path, wc, parent_level); in btrfs_drop_subtree()
5655 kfree(wc); in btrfs_drop_subtree()