Lines Matching refs:eb

173 static bool tree_mod_dont_log(struct btrfs_fs_info *fs_info, struct extent_buffer *eb)
177 if (eb && btrfs_header_level(eb) == 0)
191 struct extent_buffer *eb)
195 if (eb && btrfs_header_level(eb) == 0)
201 static struct tree_mod_elem *alloc_tree_mod_elem(struct extent_buffer *eb,
211 tm->logical = eb->start;
213 btrfs_node_key(eb, &tm->key, slot);
214 tm->blockptr = btrfs_node_blockptr(eb, slot);
218 tm->generation = btrfs_node_ptr_generation(eb, slot);
224 int btrfs_tree_mod_log_insert_key(struct extent_buffer *eb, int slot,
230 if (!tree_mod_need_log(eb->fs_info, eb))
233 tm = alloc_tree_mod_elem(eb, slot, op);
237 if (tree_mod_dont_log(eb->fs_info, eb)) {
252 ret = tree_mod_log_insert(eb->fs_info, tm);
254 write_unlock(&eb->fs_info->tree_mod_log_lock);
261 static struct tree_mod_elem *tree_mod_log_alloc_move(struct extent_buffer *eb,
271 tm->logical = eb->start;
281 int btrfs_tree_mod_log_insert_move(struct extent_buffer *eb,
291 if (!tree_mod_need_log(eb->fs_info, eb))
300 tm = tree_mod_log_alloc_move(eb, dst_slot, src_slot, nr_items);
308 tm_list[i] = alloc_tree_mod_elem(eb, i + dst_slot,
317 if (tree_mod_dont_log(eb->fs_info, eb)) {
340 ret = tree_mod_log_insert(eb->fs_info, tm_list[i]);
345 ret = tree_mod_log_insert(eb->fs_info, tm);
348 write_unlock(&eb->fs_info->tree_mod_log_lock);
357 rb_erase(&tm_list[i]->node, &eb->fs_info->tree_mod_log);
362 write_unlock(&eb->fs_info->tree_mod_log_lock);
669 int btrfs_tree_mod_log_free_eb(struct extent_buffer *eb)
676 if (!tree_mod_need_log(eb->fs_info, eb))
679 nritems = btrfs_header_nritems(eb);
687 tm_list[i] = alloc_tree_mod_elem(eb, i,
696 if (tree_mod_dont_log(eb->fs_info, eb)) {
711 ret = tree_mod_log_free_eb(eb->fs_info, tm_list, nritems);
713 write_unlock(&eb->fs_info->tree_mod_log_lock);
786 * tm is a pointer to the first operation to rewind within eb. Then, all
791 struct extent_buffer *eb,
802 * max_slot tracks the maximum valid slot of the rewind eb at every
809 * Since a rewind eb can start empty, max_slot is a signed integer with
817 n = btrfs_header_nritems(eb);
833 btrfs_set_node_key(eb, &tm->key, tm->slot);
834 btrfs_set_node_blockptr(eb, tm->slot, tm->blockptr);
835 btrfs_set_node_ptr_generation(eb, tm->slot,
843 btrfs_set_node_key(eb, &tm->key, tm->slot);
844 btrfs_set_node_blockptr(eb, tm->slot, tm->blockptr);
845 btrfs_set_node_ptr_generation(eb, tm->slot,
867 o_dst = btrfs_node_key_ptr_offset(eb, tm->slot);
868 o_src = btrfs_node_key_ptr_offset(eb, tm->move.dst_slot);
872 "move from invalid tree mod log slot eb %llu slot %d dst_slot %d nr_items %d seq %llu n %u max_slot %d",
873 eb->start, tm->slot,
877 memmove_extent_buffer(eb, o_dst, o_src,
901 btrfs_set_header_nritems(eb, n);
905 * Called with eb read locked. If the buffer cannot be rewound, the same buffer
913 struct extent_buffer *eb,
920 return eb;
922 if (btrfs_header_level(eb) == 0)
923 return eb;
925 tm = tree_mod_log_search(fs_info, eb->start, time_seq);
927 return eb;
931 eb_rewin = alloc_dummy_extent_buffer(fs_info, eb->start);
933 btrfs_tree_read_unlock(eb);
934 free_extent_buffer(eb);
937 btrfs_set_header_bytenr(eb_rewin, eb->start);
939 btrfs_header_backref_rev(eb));
940 btrfs_set_header_owner(eb_rewin, btrfs_header_owner(eb));
941 btrfs_set_header_level(eb_rewin, btrfs_header_level(eb));
943 eb_rewin = btrfs_clone_extent_buffer(eb);
945 btrfs_tree_read_unlock(eb);
946 free_extent_buffer(eb);
951 btrfs_tree_read_unlock(eb);
952 free_extent_buffer(eb);
975 struct extent_buffer *eb = NULL;
1020 eb = btrfs_clone_extent_buffer(old);
1037 free_extent_buffer(eb);
1046 eb = alloc_dummy_extent_buffer(fs_info, logical);
1048 eb = btrfs_clone_extent_buffer(eb_root);
1053 if (!eb)
1056 btrfs_set_header_bytenr(eb, eb->start);
1057 btrfs_set_header_backref_rev(eb, BTRFS_MIXED_BACKREF_REV);
1058 btrfs_set_header_owner(eb, eb_root_owner);
1059 btrfs_set_header_level(eb, old_root->level);
1060 btrfs_set_header_generation(eb, old_generation);
1062 btrfs_set_buffer_lockdep_class(btrfs_header_owner(eb), eb,
1063 btrfs_header_level(eb));
1064 btrfs_tree_read_lock(eb);
1066 tree_mod_log_rewind(fs_info, eb, time_seq, tm);
1068 WARN_ON(btrfs_header_level(eb) != 0);
1069 WARN_ON(btrfs_header_nritems(eb) > BTRFS_NODEPTRS_PER_BLOCK(fs_info));
1071 return eb;