linux/fs/btrfs/backref.h
<<
>>
Prefs
   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
  13struct inode_fs_paths {
  14        struct btrfs_path               *btrfs_path;
  15        struct btrfs_root               *fs_root;
  16        struct btrfs_data_container     *fspath;
  17};
  18
  19typedef int (iterate_extent_inodes_t)(u64 inum, u64 offset, u64 root,
  20                void *ctx);
  21
  22int 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
  26int 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
  30int 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
  36int 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
  41int paths_from_inode(u64 inum, struct inode_fs_paths *ipath);
  42
  43int btrfs_find_all_roots(struct btrfs_trans_handle *trans,
  44                         struct btrfs_fs_info *fs_info, u64 bytenr,
  45                         u64 time_seq, struct ulist **roots, bool ignore_offset);
  46char *btrfs_ref_to_path(struct btrfs_root *fs_root, struct btrfs_path *path,
  47                        u32 name_len, unsigned long name_off,
  48                        struct extent_buffer *eb_in, u64 parent,
  49                        char *dest, u32 size);
  50
  51struct btrfs_data_container *init_data_container(u32 total_bytes);
  52struct inode_fs_paths *init_ipath(s32 total_bytes, struct btrfs_root *fs_root,
  53                                        struct btrfs_path *path);
  54void free_ipath(struct inode_fs_paths *ipath);
  55
  56int btrfs_find_one_extref(struct btrfs_root *root, u64 inode_objectid,
  57                          u64 start_off, struct btrfs_path *path,
  58                          struct btrfs_inode_extref **ret_extref,
  59                          u64 *found_off);
  60int btrfs_check_shared(struct btrfs_root *root, u64 inum, u64 bytenr);
  61
  62int __init btrfs_prelim_ref_init(void);
  63void __cold btrfs_prelim_ref_exit(void);
  64
  65struct prelim_ref {
  66        struct rb_node rbnode;
  67        u64 root_id;
  68        struct btrfs_key key_for_search;
  69        int level;
  70        int count;
  71        struct extent_inode_elem *inode_list;
  72        u64 parent;
  73        u64 wanted_disk_byte;
  74};
  75
  76#endif
  77