RB_CLEAR_NODE(&ref->ref_node);
INIT_LIST_HEAD(&ref->add_list);
- if (generic_ref->type == BTRFS_REF_DATA) {
- ref->data_ref.objectid = generic_ref->data_ref.objectid;
- ref->data_ref.offset = generic_ref->data_ref.offset;
- } else {
- ref->tree_ref.level = generic_ref->tree_ref.level;
- }
+ if (generic_ref->type == BTRFS_REF_DATA)
+ ref->data_ref = generic_ref->data_ref;
+ else
+ ref->tree_ref = generic_ref->tree_ref;
}
void btrfs_init_tree_ref(struct btrfs_ref *generic_ref, int level, u64 mod_root,
BTRFS_UPDATE_DELAYED_HEAD,
} __packed;
-struct btrfs_delayed_tree_ref {
- int level;
-};
+struct btrfs_data_ref {
+ /* For EXTENT_DATA_REF */
-struct btrfs_delayed_data_ref {
+ /* Inode which refers to this data extent */
u64 objectid;
+
+ /*
+ * file_offset - extent_offset
+ *
+ * file_offset is the key.offset of the EXTENT_DATA key.
+ * extent_offset is btrfs_file_extent_offset() of the EXTENT_DATA data.
+ */
u64 offset;
};
+struct btrfs_tree_ref {
+ /*
+ * Level of this tree block.
+ *
+ * Shared for skinny (TREE_BLOCK_REF) and normal tree ref.
+ */
+ int level;
+
+ /* For non-skinny metadata, no special member needed */
+};
+
struct btrfs_delayed_ref_node {
struct rb_node ref_node;
/*
unsigned int type:8;
union {
- struct btrfs_delayed_tree_ref tree_ref;
- struct btrfs_delayed_data_ref data_ref;
+ struct btrfs_tree_ref tree_ref;
+ struct btrfs_data_ref data_ref;
};
};
BTRFS_REF_LAST,
} __packed;
-struct btrfs_data_ref {
- /* For EXTENT_DATA_REF */
-
- /* Inode which refers to this data extent */
- u64 objectid;
-
- /*
- * file_offset - extent_offset
- *
- * file_offset is the key.offset of the EXTENT_DATA key.
- * extent_offset is btrfs_file_extent_offset() of the EXTENT_DATA data.
- */
- u64 offset;
-};
-
-struct btrfs_tree_ref {
- /*
- * Level of this tree block
- *
- * Shared for skinny (TREE_BLOCK_REF) and normal tree ref.
- */
- int level;
-
- /* For non-skinny metadata, no special member needed */
-};
-
struct btrfs_ref {
enum btrfs_ref_type type;
enum btrfs_delayed_ref_action action;