xfs: Introduce XFS_DIFLAG2_NREXT64 and associated helpers
This commit adds the new per-inode flag XFS_DIFLAG2_NREXT64 to indicate that an inode supports 64-bit extent counters. This flag is also enabled by default on newly created inodes when the corresponding filesystem has large extent counter feature bit (i.e. XFS_FEAT_NREXT64) set. Reviewed-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
This commit is contained in:
parent
7c05aa9d9d
commit
9b7d16e34b
|
@ -991,15 +991,17 @@ static inline void xfs_dinode_put_rdev(struct xfs_dinode *dip, xfs_dev_t rdev)
|
|||
#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_BIGTIME_BIT 3 /* big timestamps */
|
||||
#define XFS_DIFLAG2_NREXT64_BIT 4 /* large extent counters */
|
||||
|
||||
#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_BIGTIME (1 << XFS_DIFLAG2_BIGTIME_BIT)
|
||||
#define XFS_DIFLAG2_NREXT64 (1 << XFS_DIFLAG2_NREXT64_BIT)
|
||||
|
||||
#define XFS_DIFLAG2_ANY \
|
||||
(XFS_DIFLAG2_DAX | XFS_DIFLAG2_REFLINK | XFS_DIFLAG2_COWEXTSIZE | \
|
||||
XFS_DIFLAG2_BIGTIME)
|
||||
XFS_DIFLAG2_BIGTIME | XFS_DIFLAG2_NREXT64)
|
||||
|
||||
static inline bool xfs_dinode_has_bigtime(const struct xfs_dinode *dip)
|
||||
{
|
||||
|
@ -1007,6 +1009,13 @@ static inline bool xfs_dinode_has_bigtime(const struct xfs_dinode *dip)
|
|||
(dip->di_flags2 & cpu_to_be64(XFS_DIFLAG2_BIGTIME));
|
||||
}
|
||||
|
||||
static inline bool xfs_dinode_has_large_extent_counts(
|
||||
const struct xfs_dinode *dip)
|
||||
{
|
||||
return dip->di_version >= 3 &&
|
||||
(dip->di_flags2 & cpu_to_be64(XFS_DIFLAG2_NREXT64));
|
||||
}
|
||||
|
||||
/*
|
||||
* Inode number format:
|
||||
* low inopblog bits - offset in block
|
||||
|
|
|
@ -2772,6 +2772,8 @@ xfs_ialloc_setup_geometry(
|
|||
igeo->new_diflags2 = 0;
|
||||
if (xfs_has_bigtime(mp))
|
||||
igeo->new_diflags2 |= XFS_DIFLAG2_BIGTIME;
|
||||
if (xfs_has_large_extent_counts(mp))
|
||||
igeo->new_diflags2 |= XFS_DIFLAG2_NREXT64;
|
||||
|
||||
/* Compute inode btree geometry. */
|
||||
igeo->agino_log = sbp->sb_inopblog + sbp->sb_agblklog;
|
||||
|
|
|
@ -218,6 +218,11 @@ static inline bool xfs_inode_has_bigtime(struct xfs_inode *ip)
|
|||
return ip->i_diflags2 & XFS_DIFLAG2_BIGTIME;
|
||||
}
|
||||
|
||||
static inline bool xfs_inode_has_large_extent_counts(struct xfs_inode *ip)
|
||||
{
|
||||
return ip->i_diflags2 & XFS_DIFLAG2_NREXT64;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the buftarg used for data allocations on a given inode.
|
||||
*/
|
||||
|
|
|
@ -142,6 +142,13 @@ xfs_log_dinode_to_disk_ts(
|
|||
return ts;
|
||||
}
|
||||
|
||||
static inline bool xfs_log_dinode_has_large_extent_counts(
|
||||
const struct xfs_log_dinode *ld)
|
||||
{
|
||||
return ld->di_version >= 3 &&
|
||||
(ld->di_flags2 & XFS_DIFLAG2_NREXT64);
|
||||
}
|
||||
|
||||
STATIC void
|
||||
xfs_log_dinode_to_disk(
|
||||
struct xfs_log_dinode *from,
|
||||
|
|
Loading…
Reference in New Issue