Lines Matching full:wc

5241 				     struct walk_control *wc,  in reada_walk_down()  argument
5256 if (path->slots[wc->level] < wc->reada_slot) { in reada_walk_down()
5257 wc->reada_count = wc->reada_count * 2 / 3; in reada_walk_down()
5258 wc->reada_count = max(wc->reada_count, 2); in reada_walk_down()
5260 wc->reada_count = wc->reada_count * 3 / 2; in reada_walk_down()
5261 wc->reada_count = min_t(int, wc->reada_count, in reada_walk_down()
5265 eb = path->nodes[wc->level]; in reada_walk_down()
5268 for (slot = path->slots[wc->level]; slot < nritems; slot++) { in reada_walk_down()
5269 if (nread >= wc->reada_count) in reada_walk_down()
5276 if (slot == path->slots[wc->level]) in reada_walk_down()
5279 if (wc->stage == UPDATE_BACKREF && in reada_walk_down()
5285 wc->level - 1, 1, &refs, in reada_walk_down()
5292 if (wc->stage == DROP_REFERENCE) { in reada_walk_down()
5296 if (wc->level == 1 && in reada_walk_down()
5299 if (!wc->update_ref || in reada_walk_down()
5304 &wc->update_progress); in reada_walk_down()
5308 if (wc->level == 1 && in reada_walk_down()
5316 wc->reada_slot = slot; in reada_walk_down()
5322 * when wc->stage == UPDATE_BACKREF, this function updates
5330 struct walk_control *wc, int lookup_info) in walk_down_proc() argument
5333 int level = wc->level; in walk_down_proc()
5338 if (wc->stage == UPDATE_BACKREF && in walk_down_proc()
5347 ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) || in walk_down_proc()
5348 (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) { in walk_down_proc()
5352 &wc->refs[level], in walk_down_proc()
5353 &wc->flags[level], in walk_down_proc()
5358 BUG_ON(wc->refs[level] == 0); in walk_down_proc()
5361 if (wc->stage == DROP_REFERENCE) { in walk_down_proc()
5362 if (wc->refs[level] > 1) in walk_down_proc()
5365 if (path->locks[level] && !wc->keep_locks) { in walk_down_proc()
5372 /* wc->stage == UPDATE_BACKREF */ in walk_down_proc()
5373 if (!(wc->flags[level] & flag)) { in walk_down_proc()
5381 wc->flags[level] |= flag; in walk_down_proc()
5425 * when wc->stage == DROP_REFERENCE, this function checks
5428 * rooted at the block, this function changes wc->stage to
5438 struct walk_control *wc, int *lookup_info) in do_walk_down() argument
5449 int level = wc->level; in do_walk_down()
5461 if (wc->stage == UPDATE_BACKREF && in do_walk_down()
5487 &wc->refs[level - 1], in do_walk_down()
5488 &wc->flags[level - 1], in do_walk_down()
5493 if (unlikely(wc->refs[level - 1] == 0)) { in do_walk_down()
5500 if (wc->stage == DROP_REFERENCE) { in do_walk_down()
5501 if (wc->refs[level - 1] > 1) { in do_walk_down()
5504 (wc->flags[0] & BTRFS_BLOCK_FLAG_FULL_BACKREF)) in do_walk_down()
5507 if (!wc->update_ref || in do_walk_down()
5513 ret = btrfs_comp_cpu_keys(&key, &wc->update_progress); in do_walk_down()
5517 wc->stage = UPDATE_BACKREF; in do_walk_down()
5518 wc->shared_level = level - 1; in do_walk_down()
5522 (wc->flags[0] & BTRFS_BLOCK_FLAG_FULL_BACKREF)) in do_walk_down()
5535 reada_walk_down(trans, root, wc, path); in do_walk_down()
5556 wc->level = level; in do_walk_down()
5557 if (wc->level == 1) in do_walk_down()
5558 wc->reada_slot = 0; in do_walk_down()
5561 wc->refs[level - 1] = 0; in do_walk_down()
5562 wc->flags[level - 1] = 0; in do_walk_down()
5563 if (wc->stage == DROP_REFERENCE) { in do_walk_down()
5564 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) { in do_walk_down()
5585 if (wc->restarted) { in do_walk_down()
5593 wc->restarted = 0; in do_walk_down()
5618 wc->drop_level = level; in do_walk_down()
5619 find_next_key(path, level, &wc->drop_progress); in do_walk_down()
5643 * when wc->stage == DROP_REFERENCE, this function drops
5646 * when wc->stage == UPDATE_BACKREF, this function changes
5647 * wc->stage back to DROP_REFERENCE if we changed wc->stage
5655 struct walk_control *wc) in walk_up_proc() argument
5659 int level = wc->level; in walk_up_proc()
5663 if (wc->stage == UPDATE_BACKREF) { in walk_up_proc()
5664 BUG_ON(wc->shared_level < level); in walk_up_proc()
5665 if (level < wc->shared_level) in walk_up_proc()
5668 ret = find_next_key(path, level + 1, &wc->update_progress); in walk_up_proc()
5670 wc->update_ref = 0; in walk_up_proc()
5672 wc->stage = DROP_REFERENCE; in walk_up_proc()
5673 wc->shared_level = -1; in walk_up_proc()
5688 &wc->refs[level], in walk_up_proc()
5689 &wc->flags[level], in walk_up_proc()
5696 BUG_ON(wc->refs[level] == 0); in walk_up_proc()
5697 if (wc->refs[level] == 1) { in walk_up_proc()
5705 /* wc->stage == DROP_REFERENCE */ in walk_up_proc()
5706 BUG_ON(wc->refs[level] > 1 && !path->locks[level]); in walk_up_proc()
5708 if (wc->refs[level] == 1) { in walk_up_proc()
5710 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
5733 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
5738 if (wc->flags[level + 1] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
5746 wc->refs[level] == 1); in walk_up_proc()
5748 wc->refs[level] = 0; in walk_up_proc()
5749 wc->flags[level] = 0; in walk_up_proc()
5761 struct walk_control *wc) in walk_down_tree() argument
5763 int level = wc->level; in walk_down_tree()
5768 ret = walk_down_proc(trans, root, path, wc, lookup_info); in walk_down_tree()
5779 ret = do_walk_down(trans, root, path, wc, &lookup_info); in walk_down_tree()
5785 level = wc->level; in walk_down_tree()
5793 struct walk_control *wc, int max_level) in walk_up_tree() argument
5795 int level = wc->level; in walk_up_tree()
5800 wc->level = level; in walk_up_tree()
5806 ret = walk_up_proc(trans, root, path, wc); in walk_up_tree()
5847 struct walk_control *wc; in btrfs_drop_snapshot() local
5863 wc = kzalloc(sizeof(*wc), GFP_NOFS); in btrfs_drop_snapshot()
5864 if (!wc) { in btrfs_drop_snapshot()
5903 memset(&wc->update_progress, 0, in btrfs_drop_snapshot()
5904 sizeof(wc->update_progress)); in btrfs_drop_snapshot()
5907 memcpy(&wc->update_progress, &key, in btrfs_drop_snapshot()
5908 sizeof(wc->update_progress)); in btrfs_drop_snapshot()
5934 level, 1, &wc->refs[level], in btrfs_drop_snapshot()
5935 &wc->flags[level], NULL); in btrfs_drop_snapshot()
5940 BUG_ON(wc->refs[level] == 0); in btrfs_drop_snapshot()
5947 WARN_ON(wc->refs[level] != 1); in btrfs_drop_snapshot()
5952 wc->restarted = test_bit(BTRFS_ROOT_DEAD_TREE, &root->state); in btrfs_drop_snapshot()
5953 wc->level = level; in btrfs_drop_snapshot()
5954 wc->shared_level = -1; in btrfs_drop_snapshot()
5955 wc->stage = DROP_REFERENCE; in btrfs_drop_snapshot()
5956 wc->update_ref = update_ref; in btrfs_drop_snapshot()
5957 wc->keep_locks = 0; in btrfs_drop_snapshot()
5958 wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(fs_info); in btrfs_drop_snapshot()
5962 ret = walk_down_tree(trans, root, path, wc); in btrfs_drop_snapshot()
5969 ret = walk_up_tree(trans, root, path, wc, BTRFS_MAX_LEVEL); in btrfs_drop_snapshot()
5977 BUG_ON(wc->stage != DROP_REFERENCE); in btrfs_drop_snapshot()
5981 if (wc->stage == DROP_REFERENCE) { in btrfs_drop_snapshot()
5982 wc->drop_level = wc->level; in btrfs_drop_snapshot()
5983 btrfs_node_key_to_cpu(path->nodes[wc->drop_level], in btrfs_drop_snapshot()
5984 &wc->drop_progress, in btrfs_drop_snapshot()
5985 path->slots[wc->drop_level]); in btrfs_drop_snapshot()
5988 &wc->drop_progress); in btrfs_drop_snapshot()
5989 btrfs_set_root_drop_level(root_item, wc->drop_level); in btrfs_drop_snapshot()
5991 BUG_ON(wc->level == 0); in btrfs_drop_snapshot()
6077 kfree(wc); in btrfs_drop_snapshot()
6112 struct walk_control *wc; in btrfs_drop_subtree() local
6124 wc = kzalloc(sizeof(*wc), GFP_NOFS); in btrfs_drop_subtree()
6125 if (!wc) { in btrfs_drop_subtree()
6142 wc->refs[parent_level] = 1; in btrfs_drop_subtree()
6143 wc->flags[parent_level] = BTRFS_BLOCK_FLAG_FULL_BACKREF; in btrfs_drop_subtree()
6144 wc->level = level; in btrfs_drop_subtree()
6145 wc->shared_level = -1; in btrfs_drop_subtree()
6146 wc->stage = DROP_REFERENCE; in btrfs_drop_subtree()
6147 wc->update_ref = 0; in btrfs_drop_subtree()
6148 wc->keep_locks = 1; in btrfs_drop_subtree()
6149 wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(fs_info); in btrfs_drop_subtree()
6152 wret = walk_down_tree(trans, root, path, wc); in btrfs_drop_subtree()
6158 wret = walk_up_tree(trans, root, path, wc, parent_level); in btrfs_drop_subtree()
6165 kfree(wc); in btrfs_drop_subtree()