tree-mod-log.h 1.9 KB

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