1/* SPDX-License-Identifier: GPL-2.0 */ 2 3#ifndef BTRFS_TREE_MOD_LOG_H 4#define BTRFS_TREE_MOD_LOG_H 5 6#include <linux/list.h> 7 8struct extent_buffer; 9struct btrfs_fs_info; 10struct btrfs_path; 11struct btrfs_root; 12struct btrfs_seq_list; 13 14/* Represents a tree mod log user. */ 15struct btrfs_seq_list { 16 struct list_head list; 17 u64 seq; 18}; 19 20#define BTRFS_SEQ_LIST_INIT(name) { .list = LIST_HEAD_INIT((name).list), .seq = 0 } 21#define BTRFS_SEQ_LAST ((u64)-1) 22 23enum btrfs_mod_log_op { 24 BTRFS_MOD_LOG_KEY_REPLACE, 25 BTRFS_MOD_LOG_KEY_ADD, 26 BTRFS_MOD_LOG_KEY_REMOVE, 27 BTRFS_MOD_LOG_KEY_REMOVE_WHILE_FREEING, 28 BTRFS_MOD_LOG_KEY_REMOVE_WHILE_MOVING, 29 BTRFS_MOD_LOG_MOVE_KEYS, 30 BTRFS_MOD_LOG_ROOT_REPLACE, 31}; 32 33u64 btrfs_get_tree_mod_seq(struct btrfs_fs_info *fs_info, 34 struct btrfs_seq_list *elem); 35void btrfs_put_tree_mod_seq(struct btrfs_fs_info *fs_info, 36 struct btrfs_seq_list *elem); 37int btrfs_tree_mod_log_insert_root(struct extent_buffer *old_root, 38 struct extent_buffer *new_root, 39 bool log_removal); 40int btrfs_tree_mod_log_insert_key(struct extent_buffer *eb, int slot, 41 enum btrfs_mod_log_op op); 42int btrfs_tree_mod_log_free_eb(struct extent_buffer *eb); 43struct extent_buffer *btrfs_tree_mod_log_rewind(struct btrfs_fs_info *fs_info, 44 struct btrfs_path *path, 45 struct extent_buffer *eb, 46 u64 time_seq); 47struct extent_buffer *btrfs_get_old_root(struct btrfs_root *root, u64 time_seq); 48int btrfs_old_root_level(struct btrfs_root *root, u64 time_seq); 49int btrfs_tree_mod_log_eb_copy(struct extent_buffer *dst, 50 struct extent_buffer *src, 51 unsigned long dst_offset, 52 unsigned long src_offset, 53 int nr_items); 54int btrfs_tree_mod_log_insert_move(struct extent_buffer *eb, 55 int dst_slot, int src_slot, 56 int nr_items); 57u64 btrfs_tree_mod_log_lowest_seq(struct btrfs_fs_info *fs_info); 58 59#endif 60