Re: [PATCH 05/14] xfs: stricter btree height checking when scanning for btree roots

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 18 Sep 2021 at 06:59, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@xxxxxxxxxx>
>
> When we're scanning for btree roots to rebuild the AG headers, make sure
> that the proposed tree does not exceed the maximum height for that btree
> type (and not just XFS_BTREE_MAXLEVELS).
>

Looks good.

Reviewed-by: Chandan Babu R <chandan.babu@xxxxxxxxxx>

> Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx>
> ---
>  fs/xfs/scrub/agheader_repair.c |    8 +++++++-
>  fs/xfs/scrub/repair.h          |    3 +++
>  2 files changed, 10 insertions(+), 1 deletion(-)
>
>
> diff --git a/fs/xfs/scrub/agheader_repair.c b/fs/xfs/scrub/agheader_repair.c
> index 0f8deee66f15..05c27149b65d 100644
> --- a/fs/xfs/scrub/agheader_repair.c
> +++ b/fs/xfs/scrub/agheader_repair.c
> @@ -122,7 +122,7 @@ xrep_check_btree_root(
>  	xfs_agnumber_t			agno = sc->sm->sm_agno;
>  
>  	return xfs_verify_agbno(mp, agno, fab->root) &&
> -	       fab->height <= XFS_BTREE_MAXLEVELS;
> +	       fab->height <= fab->maxlevels;
>  }
>  
>  /*
> @@ -339,18 +339,22 @@ xrep_agf(
>  		[XREP_AGF_BNOBT] = {
>  			.rmap_owner = XFS_RMAP_OWN_AG,
>  			.buf_ops = &xfs_bnobt_buf_ops,
> +			.maxlevels = sc->mp->m_ag_maxlevels,
>  		},
>  		[XREP_AGF_CNTBT] = {
>  			.rmap_owner = XFS_RMAP_OWN_AG,
>  			.buf_ops = &xfs_cntbt_buf_ops,
> +			.maxlevels = sc->mp->m_ag_maxlevels,
>  		},
>  		[XREP_AGF_RMAPBT] = {
>  			.rmap_owner = XFS_RMAP_OWN_AG,
>  			.buf_ops = &xfs_rmapbt_buf_ops,
> +			.maxlevels = sc->mp->m_rmap_maxlevels,
>  		},
>  		[XREP_AGF_REFCOUNTBT] = {
>  			.rmap_owner = XFS_RMAP_OWN_REFC,
>  			.buf_ops = &xfs_refcountbt_buf_ops,
> +			.maxlevels = sc->mp->m_refc_maxlevels,
>  		},
>  		[XREP_AGF_END] = {
>  			.buf_ops = NULL,
> @@ -881,10 +885,12 @@ xrep_agi(
>  		[XREP_AGI_INOBT] = {
>  			.rmap_owner = XFS_RMAP_OWN_INOBT,
>  			.buf_ops = &xfs_inobt_buf_ops,
> +			.maxlevels = M_IGEO(sc->mp)->inobt_maxlevels,
>  		},
>  		[XREP_AGI_FINOBT] = {
>  			.rmap_owner = XFS_RMAP_OWN_INOBT,
>  			.buf_ops = &xfs_finobt_buf_ops,
> +			.maxlevels = M_IGEO(sc->mp)->inobt_maxlevels,
>  		},
>  		[XREP_AGI_END] = {
>  			.buf_ops = NULL
> diff --git a/fs/xfs/scrub/repair.h b/fs/xfs/scrub/repair.h
> index 3bb152d52a07..840f74ec431c 100644
> --- a/fs/xfs/scrub/repair.h
> +++ b/fs/xfs/scrub/repair.h
> @@ -44,6 +44,9 @@ struct xrep_find_ag_btree {
>  	/* in: buffer ops */
>  	const struct xfs_buf_ops	*buf_ops;
>  
> +	/* in: maximum btree height */
> +	unsigned int			maxlevels;
> +
>  	/* out: the highest btree block found and the tree height */
>  	xfs_agblock_t			root;
>  	unsigned int			height;


-- 
chandan



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux