mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 22:54:05 +08:00
34 lines
912 B
C
34 lines
912 B
C
|
/* 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 */
|