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;
|
__le64 hi;
|
||||||
} __packed __aligned(8);
|
} __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_backpointer {
|
||||||
struct bch_val v;
|
struct bch_val v;
|
||||||
__u8 btree_id;
|
__u8 btree_id;
|
||||||
@ -441,45 +433,6 @@ struct bch_backpointer {
|
|||||||
struct bpos pos;
|
struct bpos pos;
|
||||||
} __packed __aligned(8);
|
} __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: */
|
/* LRU btree: */
|
||||||
|
|
||||||
struct bch_lru {
|
struct bch_lru {
|
||||||
@ -542,6 +495,8 @@ struct bch_sb_field {
|
|||||||
x(downgrade, 14)
|
x(downgrade, 14)
|
||||||
|
|
||||||
#include "alloc_background_format.h"
|
#include "alloc_background_format.h"
|
||||||
|
#include "extents_format.h"
|
||||||
|
#include "reflink_format.h"
|
||||||
#include "ec_format.h"
|
#include "ec_format.h"
|
||||||
#include "inode_format.h"
|
#include "inode_format.h"
|
||||||
#include "dirent_format.h"
|
#include "dirent_format.h"
|
||||||
|
@ -279,4 +279,17 @@ struct bch_extent {
|
|||||||
#define BKEY_BTREE_PTR_U64s_MAX \
|
#define BKEY_BTREE_PTR_U64s_MAX \
|
||||||
(BKEY_U64s + BKEY_BTREE_PTR_VAL_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 */
|
#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