Lines Matching refs:wc

7685 				     struct walk_control *wc,  in reada_walk_down()  argument
7700 if (path->slots[wc->level] < wc->reada_slot) { in reada_walk_down()
7701 wc->reada_count = wc->reada_count * 2 / 3; in reada_walk_down()
7702 wc->reada_count = max(wc->reada_count, 2); in reada_walk_down()
7704 wc->reada_count = wc->reada_count * 3 / 2; in reada_walk_down()
7705 wc->reada_count = min_t(int, wc->reada_count, in reada_walk_down()
7709 eb = path->nodes[wc->level]; in reada_walk_down()
7713 for (slot = path->slots[wc->level]; slot < nritems; slot++) { in reada_walk_down()
7714 if (nread >= wc->reada_count) in reada_walk_down()
7721 if (slot == path->slots[wc->level]) in reada_walk_down()
7724 if (wc->stage == UPDATE_BACKREF && in reada_walk_down()
7730 wc->level - 1, 1, &refs, in reada_walk_down()
7737 if (wc->stage == DROP_REFERENCE) { in reada_walk_down()
7741 if (wc->level == 1 && in reada_walk_down()
7744 if (!wc->update_ref || in reada_walk_down()
7749 &wc->update_progress); in reada_walk_down()
7753 if (wc->level == 1 && in reada_walk_down()
7761 wc->reada_slot = slot; in reada_walk_down()
7987 struct walk_control *wc, int lookup_info) in walk_down_proc() argument
7989 int level = wc->level; in walk_down_proc()
7994 if (wc->stage == UPDATE_BACKREF && in walk_down_proc()
8003 ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) || in walk_down_proc()
8004 (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) { in walk_down_proc()
8008 &wc->refs[level], in walk_down_proc()
8009 &wc->flags[level]); in walk_down_proc()
8013 BUG_ON(wc->refs[level] == 0); in walk_down_proc()
8016 if (wc->stage == DROP_REFERENCE) { in walk_down_proc()
8017 if (wc->refs[level] > 1) in walk_down_proc()
8020 if (path->locks[level] && !wc->keep_locks) { in walk_down_proc()
8028 if (!(wc->flags[level] & flag)) { in walk_down_proc()
8038 wc->flags[level] |= flag; in walk_down_proc()
8068 struct walk_control *wc, int *lookup_info) in do_walk_down() argument
8076 int level = wc->level; in do_walk_down()
8088 if (wc->stage == UPDATE_BACKREF && in do_walk_down()
8110 &wc->refs[level - 1], in do_walk_down()
8111 &wc->flags[level - 1]); in do_walk_down()
8117 if (unlikely(wc->refs[level - 1] == 0)) { in do_walk_down()
8123 if (wc->stage == DROP_REFERENCE) { in do_walk_down()
8124 if (wc->refs[level - 1] > 1) { in do_walk_down()
8127 (wc->flags[0] & BTRFS_BLOCK_FLAG_FULL_BACKREF)) in do_walk_down()
8130 if (!wc->update_ref || in do_walk_down()
8136 ret = btrfs_comp_cpu_keys(&key, &wc->update_progress); in do_walk_down()
8140 wc->stage = UPDATE_BACKREF; in do_walk_down()
8141 wc->shared_level = level - 1; in do_walk_down()
8145 (wc->flags[0] & BTRFS_BLOCK_FLAG_FULL_BACKREF)) in do_walk_down()
8158 reada_walk_down(trans, root, wc, path); in do_walk_down()
8173 wc->level = level; in do_walk_down()
8174 if (wc->level == 1) in do_walk_down()
8175 wc->reada_slot = 0; in do_walk_down()
8178 wc->refs[level - 1] = 0; in do_walk_down()
8179 wc->flags[level - 1] = 0; in do_walk_down()
8180 if (wc->stage == DROP_REFERENCE) { in do_walk_down()
8181 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) { in do_walk_down()
8224 struct walk_control *wc) in walk_up_proc() argument
8227 int level = wc->level; in walk_up_proc()
8231 if (wc->stage == UPDATE_BACKREF) { in walk_up_proc()
8232 BUG_ON(wc->shared_level < level); in walk_up_proc()
8233 if (level < wc->shared_level) in walk_up_proc()
8236 ret = find_next_key(path, level + 1, &wc->update_progress); in walk_up_proc()
8238 wc->update_ref = 0; in walk_up_proc()
8240 wc->stage = DROP_REFERENCE; in walk_up_proc()
8241 wc->shared_level = -1; in walk_up_proc()
8257 &wc->refs[level], in walk_up_proc()
8258 &wc->flags[level]); in walk_up_proc()
8264 BUG_ON(wc->refs[level] == 0); in walk_up_proc()
8265 if (wc->refs[level] == 1) { in walk_up_proc()
8274 BUG_ON(wc->refs[level] > 1 && !path->locks[level]); in walk_up_proc()
8276 if (wc->refs[level] == 1) { in walk_up_proc()
8278 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
8302 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
8308 if (wc->flags[level + 1] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
8315 btrfs_free_tree_block(trans, root, eb, parent, wc->refs[level] == 1); in walk_up_proc()
8317 wc->refs[level] = 0; in walk_up_proc()
8318 wc->flags[level] = 0; in walk_up_proc()
8325 struct walk_control *wc) in walk_down_tree() argument
8327 int level = wc->level; in walk_down_tree()
8332 ret = walk_down_proc(trans, root, path, wc, lookup_info); in walk_down_tree()
8343 ret = do_walk_down(trans, root, path, wc, &lookup_info); in walk_down_tree()
8349 level = wc->level; in walk_down_tree()
8357 struct walk_control *wc, int max_level) in walk_up_tree() argument
8359 int level = wc->level; in walk_up_tree()
8364 wc->level = level; in walk_up_tree()
8370 ret = walk_up_proc(trans, root, path, wc); in walk_up_tree()
8408 struct walk_control *wc; in btrfs_drop_snapshot() local
8423 wc = kzalloc(sizeof(*wc), GFP_NOFS); in btrfs_drop_snapshot()
8424 if (!wc) { in btrfs_drop_snapshot()
8445 memset(&wc->update_progress, 0, in btrfs_drop_snapshot()
8446 sizeof(wc->update_progress)); in btrfs_drop_snapshot()
8449 memcpy(&wc->update_progress, &key, in btrfs_drop_snapshot()
8450 sizeof(wc->update_progress)); in btrfs_drop_snapshot()
8477 level, 1, &wc->refs[level], in btrfs_drop_snapshot()
8478 &wc->flags[level]); in btrfs_drop_snapshot()
8483 BUG_ON(wc->refs[level] == 0); in btrfs_drop_snapshot()
8490 WARN_ON(wc->refs[level] != 1); in btrfs_drop_snapshot()
8495 wc->level = level; in btrfs_drop_snapshot()
8496 wc->shared_level = -1; in btrfs_drop_snapshot()
8497 wc->stage = DROP_REFERENCE; in btrfs_drop_snapshot()
8498 wc->update_ref = update_ref; in btrfs_drop_snapshot()
8499 wc->keep_locks = 0; in btrfs_drop_snapshot()
8500 wc->for_reloc = for_reloc; in btrfs_drop_snapshot()
8501 wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(root); in btrfs_drop_snapshot()
8505 ret = walk_down_tree(trans, root, path, wc); in btrfs_drop_snapshot()
8511 ret = walk_up_tree(trans, root, path, wc, BTRFS_MAX_LEVEL); in btrfs_drop_snapshot()
8518 BUG_ON(wc->stage != DROP_REFERENCE); in btrfs_drop_snapshot()
8522 if (wc->stage == DROP_REFERENCE) { in btrfs_drop_snapshot()
8523 level = wc->level; in btrfs_drop_snapshot()
8530 BUG_ON(wc->level == 0); in btrfs_drop_snapshot()
8623 kfree(wc); in btrfs_drop_snapshot()
8652 struct walk_control *wc; in btrfs_drop_subtree() local
8664 wc = kzalloc(sizeof(*wc), GFP_NOFS); in btrfs_drop_subtree()
8665 if (!wc) { in btrfs_drop_subtree()
8682 wc->refs[parent_level] = 1; in btrfs_drop_subtree()
8683 wc->flags[parent_level] = BTRFS_BLOCK_FLAG_FULL_BACKREF; in btrfs_drop_subtree()
8684 wc->level = level; in btrfs_drop_subtree()
8685 wc->shared_level = -1; in btrfs_drop_subtree()
8686 wc->stage = DROP_REFERENCE; in btrfs_drop_subtree()
8687 wc->update_ref = 0; in btrfs_drop_subtree()
8688 wc->keep_locks = 1; in btrfs_drop_subtree()
8689 wc->for_reloc = 1; in btrfs_drop_subtree()
8690 wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(root); in btrfs_drop_subtree()
8693 wret = walk_down_tree(trans, root, path, wc); in btrfs_drop_subtree()
8699 wret = walk_up_tree(trans, root, path, wc, parent_level); in btrfs_drop_subtree()
8706 kfree(wc); in btrfs_drop_subtree()