Commit 8d52ba60 authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcachefs: reflink_format.h

parent b2fa1b63
Loading
Loading
Loading
Loading
+2 −47
Original line number Diff line number Diff line
@@ -423,14 +423,6 @@ struct bch_csum {
	__le64			hi;
} __packed __aligned(8);

struct bch_reservation {
	struct bch_val		v;

	__le32			generation;
	__u8			nr_replicas;
	__u8			pad[3];
} __packed __aligned(8);

struct bch_backpointer {
	struct bch_val		v;
	__u8			btree_id;
@@ -441,45 +433,6 @@ struct bch_backpointer {
	struct bpos		pos;
} __packed __aligned(8);

#include "extents_format.h"

/* Reflink: */

struct bch_reflink_p {
	struct bch_val		v;
	__le64			idx;
	/*
	 * A reflink pointer might point to an indirect extent which is then
	 * later split (by copygc or rebalance). If we only pointed to part of
	 * the original indirect extent, and then one of the fragments is
	 * outside the range we point to, we'd leak a refcount: so when creating
	 * reflink pointers, we need to store pad values to remember the full
	 * range we were taking a reference on.
	 */
	__le32			front_pad;
	__le32			back_pad;
} __packed __aligned(8);

struct bch_reflink_v {
	struct bch_val		v;
	__le64			refcount;
	union bch_extent_entry	start[0];
	__u64			_data[];
} __packed __aligned(8);

struct bch_indirect_inline_data {
	struct bch_val		v;
	__le64			refcount;
	u8			data[];
};

/* Inline data */

struct bch_inline_data {
	struct bch_val		v;
	u8			data[];
};

/* LRU btree: */

struct bch_lru {
@@ -542,6 +495,8 @@ struct bch_sb_field {
	x(downgrade,			14)

#include "alloc_background_format.h"
#include "extents_format.h"
#include "reflink_format.h"
#include "ec_format.h"
#include "inode_format.h"
#include "dirent_format.h"
+13 −0
Original line number Diff line number Diff line
@@ -279,4 +279,17 @@ struct bch_extent {
#define BKEY_BTREE_PTR_U64s_MAX					\
	(BKEY_U64s + BKEY_BTREE_PTR_VAL_U64s_MAX)

struct bch_reservation {
	struct bch_val		v;

	__le32			generation;
	__u8			nr_replicas;
	__u8			pad[3];
} __packed __aligned(8);

struct bch_inline_data {
	struct bch_val		v;
	u8			data[];
};

#endif /* _BCACHEFS_EXTENTS_FORMAT_H */
+33 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _BCACHEFS_REFLINK_FORMAT_H
#define _BCACHEFS_REFLINK_FORMAT_H

struct bch_reflink_p {
	struct bch_val		v;
	__le64			idx;
	/*
	 * A reflink pointer might point to an indirect extent which is then
	 * later split (by copygc or rebalance). If we only pointed to part of
	 * the original indirect extent, and then one of the fragments is
	 * outside the range we point to, we'd leak a refcount: so when creating
	 * reflink pointers, we need to store pad values to remember the full
	 * range we were taking a reference on.
	 */
	__le32			front_pad;
	__le32			back_pad;
} __packed __aligned(8);

struct bch_reflink_v {
	struct bch_val		v;
	__le64			refcount;
	union bch_extent_entry	start[0];
	__u64			_data[];
} __packed __aligned(8);

struct bch_indirect_inline_data {
	struct bch_val		v;
	__le64			refcount;
	u8			data[];
};

#endif /* _BCACHEFS_REFLINK_FORMAT_H */