forked from mirrors/linux
		
	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
					
				
					 4 changed files with 24 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -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 a new issue