Commit 204a26aa authored by Darrick J. Wong's avatar Darrick J. Wong
Browse files

xfs: create a helper to compute the blockcount of a max sized remote value



Create a helper function to compute the number of fsblocks needed to
store a maximally-sized extended attribute value.

Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
Reviewed-by: default avatarAndrey Albershteyn <aalbersh@redhat.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent a5714b67
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1036,7 +1036,7 @@ xfs_attr_set(
		break;
	case XFS_ATTRUPDATE_REMOVE:
		XFS_STATS_INC(mp, xs_attr_remove);
		rmt_blks = xfs_attr3_rmt_blocks(mp, XFS_XATTR_SIZE_MAX);
		rmt_blks = xfs_attr3_max_rmt_blocks(mp);
		break;
	}

+6 −0
Original line number Diff line number Diff line
@@ -8,6 +8,12 @@

unsigned int xfs_attr3_rmt_blocks(struct xfs_mount *mp, unsigned int attrlen);

/* Number of rmt blocks needed to store the maximally sized attr value */
static inline unsigned int xfs_attr3_max_rmt_blocks(struct xfs_mount *mp)
{
	return xfs_attr3_rmt_blocks(mp, XFS_XATTR_SIZE_MAX);
}

int xfs_attr_rmtval_get(struct xfs_da_args *args);
int xfs_attr_rmtval_stale(struct xfs_inode *ip, struct xfs_bmbt_irec *map,
		xfs_buf_flags_t incore_flags);
+2 −2
Original line number Diff line number Diff line
@@ -223,7 +223,7 @@ xrep_bufscan_max_sectors(
	int			max_fsbs;

	/* Remote xattr values are the largest buffers that we support. */
	max_fsbs = xfs_attr3_rmt_blocks(mp, XFS_XATTR_SIZE_MAX);
	max_fsbs = xfs_attr3_max_rmt_blocks(mp);

	return XFS_FSB_TO_BB(mp, min_t(xfs_extlen_t, fsblocks, max_fsbs));
}
@@ -806,7 +806,7 @@ xreap_bmapi_binval(
	 * of the next hole.
	 */
	off = imap->br_startoff + imap->br_blockcount;
	max_off = off + xfs_attr3_rmt_blocks(mp, XFS_XATTR_SIZE_MAX);
	max_off = off + xfs_attr3_max_rmt_blocks(mp);
	while (off < max_off) {
		struct xfs_bmbt_irec	hmap;
		int			nhmaps = 1;