mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00:00
bcachefs: reflink_format.h
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
b2fa1b633b
commit
8d52ba60c4
@ -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"
|
||||
|
@ -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
fs/bcachefs/reflink_format.h
Normal file
33
fs/bcachefs/reflink_format.h
Normal file
@ -0,0 +1,33 @@
|
||||
/* 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 */
|
Loading…
Reference in New Issue
Block a user