Lines Matching refs:be
99 struct block_entry *be) in insert_block_entry() argument
103 node = rb_find_add(&be->node, root, block_entry_bytenr_cmp); in insert_block_entry()
217 static void free_block_entry(struct block_entry *be) in free_block_entry() argument
224 while ((n = rb_first(&be->roots))) { in free_block_entry()
226 rb_erase(&re->node, &be->roots); in free_block_entry()
230 while((n = rb_first(&be->refs))) { in free_block_entry()
232 rb_erase(&ref->node, &be->refs); in free_block_entry()
236 while (!list_empty(&be->actions)) { in free_block_entry()
237 ra = list_first_entry(&be->actions, struct ref_action, in free_block_entry()
242 kfree(be); in free_block_entry()
249 struct block_entry *be = NULL, *exist; in add_block_entry() local
253 be = kzalloc(sizeof(struct block_entry), GFP_NOFS); in add_block_entry()
254 if (!be || !re) { in add_block_entry()
256 kfree(be); in add_block_entry()
259 be->bytenr = bytenr; in add_block_entry()
260 be->len = len; in add_block_entry()
266 exist = insert_block_entry(&fs_info->block_tree, be); in add_block_entry()
277 kfree(be); in add_block_entry()
281 be->num_refs = 0; in add_block_entry()
282 be->metadata = 0; in add_block_entry()
283 be->from_disk = 0; in add_block_entry()
284 be->roots = RB_ROOT; in add_block_entry()
285 be->refs = RB_ROOT; in add_block_entry()
286 INIT_LIST_HEAD(&be->actions); in add_block_entry()
288 insert_root_entry(&be->roots, re); in add_block_entry()
291 return be; in add_block_entry()
297 struct block_entry *be; in add_tree_block() local
314 be = add_block_entry(fs_info, bytenr, fs_info->nodesize, ref_root); in add_tree_block()
315 if (IS_ERR(be)) { in add_tree_block()
317 return PTR_ERR(be); in add_tree_block()
319 be->num_refs++; in add_tree_block()
320 be->from_disk = 1; in add_tree_block()
321 be->metadata = 1; in add_tree_block()
325 re = lookup_root_entry(&be->roots, ref_root); in add_tree_block()
329 exist = insert_ref_entry(&be->refs, ref); in add_tree_block()
343 struct block_entry *be; in add_shared_data_ref() local
349 be = add_block_entry(fs_info, bytenr, num_bytes, 0); in add_shared_data_ref()
350 if (IS_ERR(be)) { in add_shared_data_ref()
352 return PTR_ERR(be); in add_shared_data_ref()
354 be->num_refs += num_refs; in add_shared_data_ref()
358 if (insert_ref_entry(&be->refs, ref)) { in add_shared_data_ref()
373 struct block_entry *be; in add_extent_data_ref() local
384 be = add_block_entry(fs_info, bytenr, num_bytes, ref_root); in add_extent_data_ref()
385 if (IS_ERR(be)) { in add_extent_data_ref()
387 return PTR_ERR(be); in add_extent_data_ref()
389 be->num_refs += num_refs; in add_extent_data_ref()
396 if (insert_ref_entry(&be->refs, ref)) { in add_extent_data_ref()
403 re = lookup_root_entry(&be->roots, ref_root); in add_extent_data_ref()
614 struct block_entry *be) in dump_block_entry() argument
623 be->bytenr, be->len, be->num_refs, be->metadata, in dump_block_entry()
624 be->from_disk); in dump_block_entry()
626 for (n = rb_first(&be->refs); n; n = rb_next(n)) { in dump_block_entry()
634 for (n = rb_first(&be->roots); n; n = rb_next(n)) { in dump_block_entry()
640 list_for_each_entry(ra, &be->actions, list) in dump_block_entry()
657 struct block_entry *be = NULL; in btrfs_ref_tree_mod() local
725 be = add_block_entry(fs_info, bytenr, num_bytes, ref_root); in btrfs_ref_tree_mod()
726 if (IS_ERR(be)) { in btrfs_ref_tree_mod()
729 ret = PTR_ERR(be); in btrfs_ref_tree_mod()
732 be->num_refs++; in btrfs_ref_tree_mod()
734 be->metadata = 1; in btrfs_ref_tree_mod()
736 if (be->num_refs != 1) { in btrfs_ref_tree_mod()
739 dump_block_entry(fs_info, be); in btrfs_ref_tree_mod()
746 while (!list_empty(&be->actions)) { in btrfs_ref_tree_mod()
749 tmp = list_first_entry(&be->actions, struct ref_action, in btrfs_ref_tree_mod()
776 be = lookup_block_entry(&fs_info->block_tree, bytenr); in btrfs_ref_tree_mod()
777 if (!be) { in btrfs_ref_tree_mod()
786 } else if (be->num_refs == 0) { in btrfs_ref_tree_mod()
790 dump_block_entry(fs_info, be); in btrfs_ref_tree_mod()
799 tmp = insert_root_entry(&be->roots, re); in btrfs_ref_tree_mod()
807 exist = insert_ref_entry(&be->refs, ref); in btrfs_ref_tree_mod()
813 dump_block_entry(fs_info, be); in btrfs_ref_tree_mod()
821 rb_erase(&exist->node, &be->refs); in btrfs_ref_tree_mod()
824 } else if (!be->metadata) { in btrfs_ref_tree_mod()
829 dump_block_entry(fs_info, be); in btrfs_ref_tree_mod()
840 dump_block_entry(fs_info, be); in btrfs_ref_tree_mod()
842 rb_erase(&ref->node, &be->refs); in btrfs_ref_tree_mod()
850 re = lookup_root_entry(&be->roots, ref_root); in btrfs_ref_tree_mod()
859 generic_ref->real_root, be->bytenr); in btrfs_ref_tree_mod()
860 dump_block_entry(fs_info, be); in btrfs_ref_tree_mod()
869 be->num_refs--; in btrfs_ref_tree_mod()
871 be->num_refs++; in btrfs_ref_tree_mod()
875 list_add_tail(&ra->list, &be->actions); in btrfs_ref_tree_mod()
890 struct block_entry *be; in btrfs_free_ref_cache() local
898 be = rb_entry(n, struct block_entry, node); in btrfs_free_ref_cache()
899 rb_erase(&be->node, &fs_info->block_tree); in btrfs_free_ref_cache()
900 free_block_entry(be); in btrfs_free_ref_cache()
909 struct block_entry *be = NULL, *entry; in btrfs_free_ref_tree_range() local
924 be = entry; in btrfs_free_ref_tree_range()
928 if (be == NULL || in btrfs_free_ref_tree_range()
929 (entry->bytenr < start && be->bytenr > start) || in btrfs_free_ref_tree_range()
930 (entry->bytenr < start && entry->bytenr > be->bytenr)) in btrfs_free_ref_tree_range()
931 be = entry; in btrfs_free_ref_tree_range()
938 if (!be) { in btrfs_free_ref_tree_range()
943 n = &be->node; in btrfs_free_ref_tree_range()
945 be = rb_entry(n, struct block_entry, node); in btrfs_free_ref_tree_range()
947 if (be->bytenr < start && be->bytenr + be->len > start) { in btrfs_free_ref_tree_range()
951 dump_block_entry(fs_info, be); in btrfs_free_ref_tree_range()
954 if (be->bytenr < start) in btrfs_free_ref_tree_range()
956 if (be->bytenr >= start + len) in btrfs_free_ref_tree_range()
958 if (be->bytenr + be->len > start + len) { in btrfs_free_ref_tree_range()
962 dump_block_entry(fs_info, be); in btrfs_free_ref_tree_range()
964 rb_erase(&be->node, &fs_info->block_tree); in btrfs_free_ref_tree_range()
965 free_block_entry(be); in btrfs_free_ref_tree_range()