summaryrefslogtreecommitdiff
path: root/fs/btrfs/relocation.c
diff options
context:
space:
mode:
authorQu Wenruo <wqu@suse.com>2020-03-23 10:03:56 +0300
committerDavid Sterba <dsterba@suse.com>2020-05-25 12:25:19 +0300
commit7053544146ac7eb71de6cee1ffda678714f905d8 (patch)
tree833dbe4100b2df3fc1f7a1bd6d933118f6dc6a0a /fs/btrfs/relocation.c
parenta26195a5230d61e4c214b17cc611e3ac7cc64c33 (diff)
downloadlinux-7053544146ac7eb71de6cee1ffda678714f905d8.tar.xz
btrfs: backref: move btrfs_backref_(node|edge|cache) structures to backref.h
These 3 structures are the main part of btrfs backref cache, move them to backref.h to build the basis for later reuse. Signed-off-by: Qu Wenruo <wqu@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/relocation.c')
-rw-r--r--fs/btrfs/relocation.c113
1 files changed, 0 insertions, 113 deletions
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
index 453711bec3ea..8fa10d8306c2 100644
--- a/fs/btrfs/relocation.c
+++ b/fs/btrfs/relocation.c
@@ -80,121 +80,8 @@ struct tree_entry {
u64 bytenr;
};
-/*
- * present a tree block in the backref cache
- */
-struct btrfs_backref_node {
- struct rb_node rb_node;
- u64 bytenr;
-
- u64 new_bytenr;
- /* objectid of tree block owner, can be not uptodate */
- u64 owner;
- /* link to pending, changed or detached list */
- struct list_head list;
-
- /* List of upper level edges, which link this node to its parents */
- struct list_head upper;
- /* List of lower level edges, which link this node to its children */
- struct list_head lower;
-
- /* NULL if this node is not tree root */
- struct btrfs_root *root;
- /* extent buffer got by COW the block */
- struct extent_buffer *eb;
- /* level of tree block */
- unsigned int level:8;
- /* is the block in non-reference counted tree */
- unsigned int cowonly:1;
- /* 1 if no child node in the cache */
- unsigned int lowest:1;
- /* is the extent buffer locked */
- unsigned int locked:1;
- /* has the block been processed */
- unsigned int processed:1;
- /* have backrefs of this block been checked */
- unsigned int checked:1;
- /*
- * 1 if corresponding block has been cowed but some upper
- * level block pointers may not point to the new location
- */
- unsigned int pending:1;
- /*
- * 1 if the backref node isn't connected to any other
- * backref node.
- */
- unsigned int detached:1;
-
- /*
- * For generic purpose backref cache, where we only care if it's a reloc
- * root, doesn't care the source subvolid.
- */
- unsigned int is_reloc_root:1;
-};
-
-#define LOWER 0
-#define UPPER 1
#define RELOCATION_RESERVED_NODES 256
/*
- * present an edge connecting upper and lower backref nodes.
- */
-struct btrfs_backref_edge {
- /*
- * list[LOWER] is linked to btrfs_backref_node::upper of lower level
- * node, and list[UPPER] is linked to btrfs_backref_node::lower of
- * upper level node.
- *
- * Also, build_backref_tree() uses list[UPPER] for pending edges, before
- * linking list[UPPER] to its upper level nodes.
- */
- struct list_head list[2];
-
- /* Two related nodes */
- struct btrfs_backref_node *node[2];
-};
-
-
-struct btrfs_backref_cache {
- /* red black tree of all backref nodes in the cache */
- struct rb_root rb_root;
- /* for passing backref nodes to btrfs_reloc_cow_block */
- struct btrfs_backref_node *path[BTRFS_MAX_LEVEL];
- /*
- * list of blocks that have been cowed but some block
- * pointers in upper level blocks may not reflect the
- * new location
- */
- struct list_head pending[BTRFS_MAX_LEVEL];
- /* list of backref nodes with no child node */
- struct list_head leaves;
- /* list of blocks that have been cowed in current transaction */
- struct list_head changed;
- /* list of detached backref node. */
- struct list_head detached;
-
- u64 last_trans;
-
- int nr_nodes;
- int nr_edges;
-
- /* The list of unchecked backref edges during backref cache build */
- struct list_head pending_edge;
-
- /* The list of useless backref nodes during backref cache build */
- struct list_head useless_node;
-
- struct btrfs_fs_info *fs_info;
-
- /*
- * Whether this cache is for relocation
- *
- * Reloction backref cache require more info for reloc root compared
- * to generic backref cache.
- */
- unsigned int is_reloc;
-};
-
-/*
* map address of tree root to tree
*/
struct mapping_node {