0001
0002
0003 #ifndef BTRFS_TREE_MOD_LOG_H
0004 #define BTRFS_TREE_MOD_LOG_H
0005
0006 #include "ctree.h"
0007
0008
0009 struct btrfs_seq_list {
0010 struct list_head list;
0011 u64 seq;
0012 };
0013
0014 #define BTRFS_SEQ_LIST_INIT(name) { .list = LIST_HEAD_INIT((name).list), .seq = 0 }
0015 #define BTRFS_SEQ_LAST ((u64)-1)
0016
0017 enum btrfs_mod_log_op {
0018 BTRFS_MOD_LOG_KEY_REPLACE,
0019 BTRFS_MOD_LOG_KEY_ADD,
0020 BTRFS_MOD_LOG_KEY_REMOVE,
0021 BTRFS_MOD_LOG_KEY_REMOVE_WHILE_FREEING,
0022 BTRFS_MOD_LOG_KEY_REMOVE_WHILE_MOVING,
0023 BTRFS_MOD_LOG_MOVE_KEYS,
0024 BTRFS_MOD_LOG_ROOT_REPLACE,
0025 };
0026
0027 u64 btrfs_get_tree_mod_seq(struct btrfs_fs_info *fs_info,
0028 struct btrfs_seq_list *elem);
0029 void btrfs_put_tree_mod_seq(struct btrfs_fs_info *fs_info,
0030 struct btrfs_seq_list *elem);
0031 int btrfs_tree_mod_log_insert_root(struct extent_buffer *old_root,
0032 struct extent_buffer *new_root,
0033 bool log_removal);
0034 int btrfs_tree_mod_log_insert_key(struct extent_buffer *eb, int slot,
0035 enum btrfs_mod_log_op op, gfp_t flags);
0036 int btrfs_tree_mod_log_free_eb(struct extent_buffer *eb);
0037 struct extent_buffer *btrfs_tree_mod_log_rewind(struct btrfs_fs_info *fs_info,
0038 struct btrfs_path *path,
0039 struct extent_buffer *eb,
0040 u64 time_seq);
0041 struct extent_buffer *btrfs_get_old_root(struct btrfs_root *root, u64 time_seq);
0042 int btrfs_old_root_level(struct btrfs_root *root, u64 time_seq);
0043 int btrfs_tree_mod_log_eb_copy(struct extent_buffer *dst,
0044 struct extent_buffer *src,
0045 unsigned long dst_offset,
0046 unsigned long src_offset,
0047 int nr_items);
0048 int btrfs_tree_mod_log_insert_move(struct extent_buffer *eb,
0049 int dst_slot, int src_slot,
0050 int nr_items);
0051 u64 btrfs_tree_mod_log_lowest_seq(struct btrfs_fs_info *fs_info);
0052
0053 #endif