mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
xfs: introduce refcount btree definitions
Add new per-AG refcount btree definitions to the per-AG structures. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
c75c752d03
commit
46eeb521b9
11 changed files with 93 additions and 10 deletions
|
@ -456,6 +456,7 @@ xfs_sb_has_compat_feature(
|
|||
|
||||
#define XFS_SB_FEAT_RO_COMPAT_FINOBT (1 << 0) /* free inode btree */
|
||||
#define XFS_SB_FEAT_RO_COMPAT_RMAPBT (1 << 1) /* reverse map btree */
|
||||
#define XFS_SB_FEAT_RO_COMPAT_REFLINK (1 << 2) /* reflinked files */
|
||||
#define XFS_SB_FEAT_RO_COMPAT_ALL \
|
||||
(XFS_SB_FEAT_RO_COMPAT_FINOBT | \
|
||||
XFS_SB_FEAT_RO_COMPAT_RMAPBT)
|
||||
|
@ -546,6 +547,12 @@ static inline bool xfs_sb_version_hasrmapbt(struct xfs_sb *sbp)
|
|||
(sbp->sb_features_ro_compat & XFS_SB_FEAT_RO_COMPAT_RMAPBT);
|
||||
}
|
||||
|
||||
static inline bool xfs_sb_version_hasreflink(struct xfs_sb *sbp)
|
||||
{
|
||||
return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5 &&
|
||||
(sbp->sb_features_ro_compat & XFS_SB_FEAT_RO_COMPAT_REFLINK);
|
||||
}
|
||||
|
||||
/*
|
||||
* end of superblock version macros
|
||||
*/
|
||||
|
@ -641,14 +648,17 @@ typedef struct xfs_agf {
|
|||
uuid_t agf_uuid; /* uuid of filesystem */
|
||||
|
||||
__be32 agf_rmap_blocks; /* rmapbt blocks used */
|
||||
__be32 agf_padding; /* padding */
|
||||
__be32 agf_refcount_blocks; /* refcountbt blocks used */
|
||||
|
||||
__be32 agf_refcount_root; /* refcount tree root block */
|
||||
__be32 agf_refcount_level; /* refcount btree levels */
|
||||
|
||||
/*
|
||||
* reserve some contiguous space for future logged fields before we add
|
||||
* the unlogged fields. This makes the range logging via flags and
|
||||
* structure offsets much simpler.
|
||||
*/
|
||||
__be64 agf_spare64[15];
|
||||
__be64 agf_spare64[14];
|
||||
|
||||
/* unlogged fields, written during buffer writeback. */
|
||||
__be64 agf_lsn; /* last write sequence */
|
||||
|
@ -1041,9 +1051,14 @@ static inline void xfs_dinode_put_rdev(struct xfs_dinode *dip, xfs_dev_t rdev)
|
|||
* 16 bits of the XFS_XFLAG_s range.
|
||||
*/
|
||||
#define XFS_DIFLAG2_DAX_BIT 0 /* use DAX for this inode */
|
||||
#define XFS_DIFLAG2_REFLINK_BIT 1 /* file's blocks may be shared */
|
||||
#define XFS_DIFLAG2_COWEXTSIZE_BIT 2 /* copy on write extent size hint */
|
||||
#define XFS_DIFLAG2_DAX (1 << XFS_DIFLAG2_DAX_BIT)
|
||||
#define XFS_DIFLAG2_REFLINK (1 << XFS_DIFLAG2_REFLINK_BIT)
|
||||
#define XFS_DIFLAG2_COWEXTSIZE (1 << XFS_DIFLAG2_COWEXTSIZE_BIT)
|
||||
|
||||
#define XFS_DIFLAG2_ANY (XFS_DIFLAG2_DAX)
|
||||
#define XFS_DIFLAG2_ANY \
|
||||
(XFS_DIFLAG2_DAX | XFS_DIFLAG2_REFLINK | XFS_DIFLAG2_COWEXTSIZE)
|
||||
|
||||
/*
|
||||
* Inode number format:
|
||||
|
@ -1353,7 +1368,8 @@ struct xfs_owner_info {
|
|||
#define XFS_RMAP_OWN_AG (-5ULL) /* AG freespace btree blocks */
|
||||
#define XFS_RMAP_OWN_INOBT (-6ULL) /* Inode btree blocks */
|
||||
#define XFS_RMAP_OWN_INODES (-7ULL) /* Inode chunk */
|
||||
#define XFS_RMAP_OWN_MIN (-8ULL) /* guard */
|
||||
#define XFS_RMAP_OWN_REFC (-8ULL) /* refcount tree */
|
||||
#define XFS_RMAP_OWN_MIN (-9ULL) /* guard */
|
||||
|
||||
#define XFS_RMAP_NON_INODE_OWNER(owner) (!!((owner) & (1ULL << 63)))
|
||||
|
||||
|
@ -1433,6 +1449,13 @@ typedef __be32 xfs_rmap_ptr_t;
|
|||
XFS_FIBT_BLOCK(mp) + 1 : \
|
||||
XFS_IBT_BLOCK(mp) + 1)
|
||||
|
||||
/*
|
||||
* Reference Count Btree format definitions
|
||||
*
|
||||
*/
|
||||
#define XFS_REFC_CRC_MAGIC 0x52334643 /* 'R3FC' */
|
||||
|
||||
|
||||
/*
|
||||
* BMAP Btree format definitions
|
||||
*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue