tree-mod-log.h 1.7 KB

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