1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (C) 2011 STRATO. All rights reserved. 4 */ 5 6 #ifndef BTRFS_BACKREF_H 7 #define BTRFS_BACKREF_H 8 9 #include <linux/btrfs.h> 10 #include "ulist.h" 11 #include "extent_io.h" 12 13 struct inode_fs_paths { 14 struct btrfs_path *btrfs_path; 15 struct btrfs_root *fs_root; 16 struct btrfs_data_container *fspath; 17 }; 18 19 typedef int (iterate_extent_inodes_t)(u64 inum, u64 offset, u64 root, 20 void *ctx); 21 22 int extent_from_logical(struct btrfs_fs_info *fs_info, u64 logical, 23 struct btrfs_path *path, struct btrfs_key *found_key, 24 u64 *flags); 25 26 int tree_backref_for_extent(unsigned long *ptr, struct extent_buffer *eb, 27 struct btrfs_key *key, struct btrfs_extent_item *ei, 28 u32 item_size, u64 *out_root, u8 *out_level); 29 30 int iterate_extent_inodes(struct btrfs_fs_info *fs_info, 31 u64 extent_item_objectid, 32 u64 extent_offset, int search_commit_root, 33 iterate_extent_inodes_t *iterate, void *ctx, 34 bool ignore_offset); 35 36 int iterate_inodes_from_logical(u64 logical, struct btrfs_fs_info *fs_info, 37 struct btrfs_path *path, 38 iterate_extent_inodes_t *iterate, void *ctx, 39 bool ignore_offset); 40 41 int paths_from_inode(u64 inum, struct inode_fs_paths *ipath); 42 43 int btrfs_find_all_leafs(struct btrfs_trans_handle *trans, 44 struct btrfs_fs_info *fs_info, u64 bytenr, 45 u64 time_seq, struct ulist **leafs, 46 const u64 *extent_item_pos, bool ignore_offset); 47 int btrfs_find_all_roots(struct btrfs_trans_handle *trans, 48 struct btrfs_fs_info *fs_info, u64 bytenr, 49 u64 time_seq, struct ulist **roots, bool ignore_offset); 50 char *btrfs_ref_to_path(struct btrfs_root *fs_root, struct btrfs_path *path, 51 u32 name_len, unsigned long name_off, 52 struct extent_buffer *eb_in, u64 parent, 53 char *dest, u32 size); 54 55 struct btrfs_data_container *init_data_container(u32 total_bytes); 56 struct inode_fs_paths *init_ipath(s32 total_bytes, struct btrfs_root *fs_root, 57 struct btrfs_path *path); 58 void free_ipath(struct inode_fs_paths *ipath); 59 60 int btrfs_find_one_extref(struct btrfs_root *root, u64 inode_objectid, 61 u64 start_off, struct btrfs_path *path, 62 struct btrfs_inode_extref **ret_extref, 63 u64 *found_off); 64 int btrfs_check_shared(struct btrfs_root *root, u64 inum, u64 bytenr, 65 struct ulist *roots, struct ulist *tmp_ulist); 66 67 int __init btrfs_prelim_ref_init(void); 68 void __cold btrfs_prelim_ref_exit(void); 69 70 struct prelim_ref { 71 struct rb_node rbnode; 72 u64 root_id; 73 struct btrfs_key key_for_search; 74 int level; 75 int count; 76 struct extent_inode_elem *inode_list; 77 u64 parent; 78 u64 wanted_disk_byte; 79 }; 80 81 #endif 82