diff options
Diffstat (limited to 'fs/xfs/xfs_itable.c')
| -rw-r--r-- | fs/xfs/xfs_itable.c | 15 | 
1 files changed, 13 insertions, 2 deletions
diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c index c08c79d9e311..f74c9fff72bb 100644 --- a/fs/xfs/xfs_itable.c +++ b/fs/xfs/xfs_itable.c @@ -64,6 +64,7 @@ xfs_bulkstat_one_int(  	struct xfs_inode	*ip;		/* incore inode pointer */  	struct inode		*inode;  	struct xfs_bulkstat	*buf = bc->buf; +	xfs_extnum_t		nextents;  	int			error = -EINVAL;  	if (xfs_internal_inum(mp, ino)) @@ -102,7 +103,13 @@ xfs_bulkstat_one_int(  	buf->bs_xflags = xfs_ip2xflags(ip);  	buf->bs_extsize_blks = ip->i_extsize; -	buf->bs_extents = xfs_ifork_nextents(&ip->i_df); + +	nextents = xfs_ifork_nextents(&ip->i_df); +	if (!(bc->breq->flags & XFS_IBULK_NREXT64)) +		buf->bs_extents = min(nextents, XFS_MAX_EXTCNT_DATA_FORK_SMALL); +	else +		buf->bs_extents64 = nextents; +  	xfs_bulkstat_health(ip, buf);  	buf->bs_aextents = xfs_ifork_nextents(ip->i_afp);  	buf->bs_forkoff = XFS_IFORK_BOFF(ip); @@ -256,6 +263,7 @@ xfs_bulkstat(  		.breq		= breq,  	};  	struct xfs_trans	*tp; +	unsigned int		iwalk_flags = 0;  	int			error;  	if (breq->mnt_userns != &init_user_ns) { @@ -279,7 +287,10 @@ xfs_bulkstat(  	if (error)  		goto out; -	error = xfs_iwalk(breq->mp, tp, breq->startino, breq->flags, +	if (breq->flags & XFS_IBULK_SAME_AG) +		iwalk_flags |= XFS_IWALK_SAME_AG; + +	error = xfs_iwalk(breq->mp, tp, breq->startino, iwalk_flags,  			xfs_bulkstat_iwalk, breq->icount, &bc);  	xfs_trans_cancel(tp);  out:  |