mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-09 14:43:16 +00:00
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_REFLINK_BIT 1 /* file's blocks may be shared */
|
||||||
#define XFS_DIFLAG2_COWEXTSIZE_BIT 2 /* copy on write extent size hint */
|
#define XFS_DIFLAG2_COWEXTSIZE_BIT 2 /* copy on write extent size hint */
|
||||||
#define XFS_DIFLAG2_BIGTIME_BIT 3 /* big timestamps */
|
#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_DAX (1 << XFS_DIFLAG2_DAX_BIT)
|
||||||
#define XFS_DIFLAG2_REFLINK (1 << XFS_DIFLAG2_REFLINK_BIT)
|
#define XFS_DIFLAG2_REFLINK (1 << XFS_DIFLAG2_REFLINK_BIT)
|
||||||
#define XFS_DIFLAG2_COWEXTSIZE (1 << XFS_DIFLAG2_COWEXTSIZE_BIT)
|
#define XFS_DIFLAG2_COWEXTSIZE (1 << XFS_DIFLAG2_COWEXTSIZE_BIT)
|
||||||
#define XFS_DIFLAG2_BIGTIME (1 << XFS_DIFLAG2_BIGTIME_BIT)
|
#define XFS_DIFLAG2_BIGTIME (1 << XFS_DIFLAG2_BIGTIME_BIT)
|
||||||
|
#define XFS_DIFLAG2_NREXT64 (1 << XFS_DIFLAG2_NREXT64_BIT)
|
||||||
|
|
||||||
#define XFS_DIFLAG2_ANY \
|
#define XFS_DIFLAG2_ANY \
|
||||||
(XFS_DIFLAG2_DAX | XFS_DIFLAG2_REFLINK | XFS_DIFLAG2_COWEXTSIZE | \
|
(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)
|
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));
|
(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:
|
* Inode number format:
|
||||||
* low inopblog bits - offset in block
|
* low inopblog bits - offset in block
|
||||||
|
@ -2772,6 +2772,8 @@ xfs_ialloc_setup_geometry(
|
|||||||
igeo->new_diflags2 = 0;
|
igeo->new_diflags2 = 0;
|
||||||
if (xfs_has_bigtime(mp))
|
if (xfs_has_bigtime(mp))
|
||||||
igeo->new_diflags2 |= XFS_DIFLAG2_BIGTIME;
|
igeo->new_diflags2 |= XFS_DIFLAG2_BIGTIME;
|
||||||
|
if (xfs_has_large_extent_counts(mp))
|
||||||
|
igeo->new_diflags2 |= XFS_DIFLAG2_NREXT64;
|
||||||
|
|
||||||
/* Compute inode btree geometry. */
|
/* Compute inode btree geometry. */
|
||||||
igeo->agino_log = sbp->sb_inopblog + sbp->sb_agblklog;
|
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;
|
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.
|
* Return the buftarg used for data allocations on a given inode.
|
||||||
*/
|
*/
|
||||||
|
@ -142,6 +142,13 @@ xfs_log_dinode_to_disk_ts(
|
|||||||
return 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
|
STATIC void
|
||||||
xfs_log_dinode_to_disk(
|
xfs_log_dinode_to_disk(
|
||||||
struct xfs_log_dinode *from,
|
struct xfs_log_dinode *from,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user