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: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Andrey Albershteyn <aalbersh@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
Darrick J. Wong 2024-05-02 07:48:36 -07:00
parent a5714b67ca
commit 204a26aa1d
3 changed files with 9 additions and 3 deletions

View File

@ -1036,7 +1036,7 @@ xfs_attr_set(
break; break;
case XFS_ATTRUPDATE_REMOVE: case XFS_ATTRUPDATE_REMOVE:
XFS_STATS_INC(mp, xs_attr_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; break;
} }

View File

@ -8,6 +8,12 @@
unsigned int xfs_attr3_rmt_blocks(struct xfs_mount *mp, unsigned int attrlen); 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_get(struct xfs_da_args *args);
int xfs_attr_rmtval_stale(struct xfs_inode *ip, struct xfs_bmbt_irec *map, int xfs_attr_rmtval_stale(struct xfs_inode *ip, struct xfs_bmbt_irec *map,
xfs_buf_flags_t incore_flags); xfs_buf_flags_t incore_flags);

View File

@ -223,7 +223,7 @@ xrep_bufscan_max_sectors(
int max_fsbs; int max_fsbs;
/* Remote xattr values are the largest buffers that we support. */ /* 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)); 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. * of the next hole.
*/ */
off = imap->br_startoff + imap->br_blockcount; 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) { while (off < max_off) {
struct xfs_bmbt_irec hmap; struct xfs_bmbt_irec hmap;
int nhmaps = 1; int nhmaps = 1;