Lines Matching full:eb

178 static inline bool skip_eb_logging(const struct extent_buffer *eb)  in skip_eb_logging()  argument
180 const u64 owner = btrfs_header_owner(eb); in skip_eb_logging()
182 if (btrfs_header_level(eb) == 0) in skip_eb_logging()
208 static bool tree_mod_dont_log(struct btrfs_fs_info *fs_info, const struct extent_buffer *eb) in tree_mod_dont_log() argument
212 if (eb && skip_eb_logging(eb)) in tree_mod_dont_log()
226 const struct extent_buffer *eb) in tree_mod_need_log() argument
230 if (eb && skip_eb_logging(eb)) in tree_mod_need_log()
236 static struct tree_mod_elem *alloc_tree_mod_elem(const struct extent_buffer *eb, in alloc_tree_mod_elem() argument
250 tm->logical = eb->start; in alloc_tree_mod_elem()
251 btrfs_node_key(eb, &tm->slot_change.key, slot); in alloc_tree_mod_elem()
252 tm->slot_change.blockptr = btrfs_node_blockptr(eb, slot); in alloc_tree_mod_elem()
255 tm->generation = btrfs_node_ptr_generation(eb, slot); in alloc_tree_mod_elem()
261 int btrfs_tree_mod_log_insert_key(const struct extent_buffer *eb, int slot, in btrfs_tree_mod_log_insert_key() argument
267 if (!tree_mod_need_log(eb->fs_info, eb)) in btrfs_tree_mod_log_insert_key()
270 tm = alloc_tree_mod_elem(eb, slot, op); in btrfs_tree_mod_log_insert_key()
274 if (tree_mod_dont_log(eb->fs_info, eb)) { in btrfs_tree_mod_log_insert_key()
289 ret = tree_mod_log_insert(eb->fs_info, tm); in btrfs_tree_mod_log_insert_key()
291 write_unlock(&eb->fs_info->tree_mod_log_lock); in btrfs_tree_mod_log_insert_key()
298 static struct tree_mod_elem *tree_mod_log_alloc_move(const struct extent_buffer *eb, in tree_mod_log_alloc_move() argument
308 tm->logical = eb->start; in tree_mod_log_alloc_move()
318 int btrfs_tree_mod_log_insert_move(const struct extent_buffer *eb, in btrfs_tree_mod_log_insert_move() argument
328 if (!tree_mod_need_log(eb->fs_info, eb)) in btrfs_tree_mod_log_insert_move()
337 tm = tree_mod_log_alloc_move(eb, dst_slot, src_slot, nr_items); in btrfs_tree_mod_log_insert_move()
345 tm_list[i] = alloc_tree_mod_elem(eb, i + dst_slot, in btrfs_tree_mod_log_insert_move()
354 if (tree_mod_dont_log(eb->fs_info, eb)) { in btrfs_tree_mod_log_insert_move()
377 ret = tree_mod_log_insert(eb->fs_info, tm_list[i]); in btrfs_tree_mod_log_insert_move()
382 ret = tree_mod_log_insert(eb->fs_info, tm); in btrfs_tree_mod_log_insert_move()
385 write_unlock(&eb->fs_info->tree_mod_log_lock); in btrfs_tree_mod_log_insert_move()
394 rb_erase(&tm_list[i]->node, &eb->fs_info->tree_mod_log); in btrfs_tree_mod_log_insert_move()
399 write_unlock(&eb->fs_info->tree_mod_log_lock); in btrfs_tree_mod_log_insert_move()
706 int btrfs_tree_mod_log_free_eb(struct extent_buffer *eb) in btrfs_tree_mod_log_free_eb() argument
713 if (!tree_mod_need_log(eb->fs_info, eb)) in btrfs_tree_mod_log_free_eb()
716 nritems = btrfs_header_nritems(eb); in btrfs_tree_mod_log_free_eb()
724 tm_list[i] = alloc_tree_mod_elem(eb, i, in btrfs_tree_mod_log_free_eb()
733 if (tree_mod_dont_log(eb->fs_info, eb)) { in btrfs_tree_mod_log_free_eb()
748 ret = tree_mod_log_free_eb(eb->fs_info, tm_list, nritems); in btrfs_tree_mod_log_free_eb()
750 write_unlock(&eb->fs_info->tree_mod_log_lock); in btrfs_tree_mod_log_free_eb()
823 * tm is a pointer to the first operation to rewind within eb. Then, all
828 struct extent_buffer *eb, in tree_mod_log_rewind() argument
839 * max_slot tracks the maximum valid slot of the rewind eb at every in tree_mod_log_rewind()
846 * Since a rewind eb can start empty, max_slot is a signed integer with in tree_mod_log_rewind()
854 n = btrfs_header_nritems(eb); in tree_mod_log_rewind()
870 btrfs_set_node_key(eb, &tm->slot_change.key, tm->slot); in tree_mod_log_rewind()
871 btrfs_set_node_blockptr(eb, tm->slot, tm->slot_change.blockptr); in tree_mod_log_rewind()
872 btrfs_set_node_ptr_generation(eb, tm->slot, in tree_mod_log_rewind()
880 btrfs_set_node_key(eb, &tm->slot_change.key, tm->slot); in tree_mod_log_rewind()
881 btrfs_set_node_blockptr(eb, tm->slot, tm->slot_change.blockptr); in tree_mod_log_rewind()
882 btrfs_set_node_ptr_generation(eb, tm->slot, in tree_mod_log_rewind()
904 o_dst = btrfs_node_key_ptr_offset(eb, tm->slot); in tree_mod_log_rewind()
905 o_src = btrfs_node_key_ptr_offset(eb, tm->move.dst_slot); in tree_mod_log_rewind()
909 "move from invalid tree mod log slot eb %llu slot %d dst_slot %d nr_items %d seq %llu n %u max_slot… in tree_mod_log_rewind()
910 eb->start, tm->slot, in tree_mod_log_rewind()
914 memmove_extent_buffer(eb, o_dst, o_src, in tree_mod_log_rewind()
938 btrfs_set_header_nritems(eb, n); in tree_mod_log_rewind()
942 * Called with eb read locked. If the buffer cannot be rewound, the same buffer
949 struct extent_buffer *eb, in btrfs_tree_mod_log_rewind() argument
956 return eb; in btrfs_tree_mod_log_rewind()
958 if (btrfs_header_level(eb) == 0) in btrfs_tree_mod_log_rewind()
959 return eb; in btrfs_tree_mod_log_rewind()
961 tm = tree_mod_log_search(fs_info, eb->start, time_seq); in btrfs_tree_mod_log_rewind()
963 return eb; in btrfs_tree_mod_log_rewind()
967 eb_rewin = alloc_dummy_extent_buffer(fs_info, eb->start); in btrfs_tree_mod_log_rewind()
969 btrfs_tree_read_unlock(eb); in btrfs_tree_mod_log_rewind()
970 free_extent_buffer(eb); in btrfs_tree_mod_log_rewind()
973 btrfs_set_header_bytenr(eb_rewin, eb->start); in btrfs_tree_mod_log_rewind()
975 btrfs_header_backref_rev(eb)); in btrfs_tree_mod_log_rewind()
976 btrfs_set_header_owner(eb_rewin, btrfs_header_owner(eb)); in btrfs_tree_mod_log_rewind()
977 btrfs_set_header_level(eb_rewin, btrfs_header_level(eb)); in btrfs_tree_mod_log_rewind()
979 eb_rewin = btrfs_clone_extent_buffer(eb); in btrfs_tree_mod_log_rewind()
981 btrfs_tree_read_unlock(eb); in btrfs_tree_mod_log_rewind()
982 free_extent_buffer(eb); in btrfs_tree_mod_log_rewind()
987 btrfs_tree_read_unlock(eb); in btrfs_tree_mod_log_rewind()
988 free_extent_buffer(eb); in btrfs_tree_mod_log_rewind()
1011 struct extent_buffer *eb = NULL; in btrfs_get_old_root() local
1056 eb = btrfs_clone_extent_buffer(old); in btrfs_get_old_root()
1073 free_extent_buffer(eb); in btrfs_get_old_root()
1082 eb = alloc_dummy_extent_buffer(fs_info, logical); in btrfs_get_old_root()
1084 eb = btrfs_clone_extent_buffer(eb_root); in btrfs_get_old_root()
1089 if (!eb) in btrfs_get_old_root()
1092 btrfs_set_header_bytenr(eb, eb->start); in btrfs_get_old_root()
1093 btrfs_set_header_backref_rev(eb, BTRFS_MIXED_BACKREF_REV); in btrfs_get_old_root()
1094 btrfs_set_header_owner(eb, eb_root_owner); in btrfs_get_old_root()
1095 btrfs_set_header_level(eb, old_root->level); in btrfs_get_old_root()
1096 btrfs_set_header_generation(eb, old_generation); in btrfs_get_old_root()
1098 btrfs_set_buffer_lockdep_class(btrfs_header_owner(eb), eb, in btrfs_get_old_root()
1099 btrfs_header_level(eb)); in btrfs_get_old_root()
1100 btrfs_tree_read_lock(eb); in btrfs_get_old_root()
1102 tree_mod_log_rewind(fs_info, eb, time_seq, tm); in btrfs_get_old_root()
1104 WARN_ON(btrfs_header_level(eb) != 0); in btrfs_get_old_root()
1105 WARN_ON(btrfs_header_nritems(eb) > BTRFS_NODEPTRS_PER_BLOCK(fs_info)); in btrfs_get_old_root()
1107 return eb; in btrfs_get_old_root()