Re: [PATCH 10/34] xfs: move the dir2 leaf header size to struct xfs_da_geometry

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

 



On Fri, Nov 01, 2019 at 03:06:55PM -0700, Christoph Hellwig wrote:
> Move the leaf header size towards our structure for dir/attr geometry
> parameters.
> 
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>

Looks reasonable,
Reviewed-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>

--D

> ---
>  fs/xfs/libxfs/xfs_da_btree.h  | 1 +
>  fs/xfs/libxfs/xfs_da_format.c | 3 ---
>  fs/xfs/libxfs/xfs_dir2.c      | 7 +++++--
>  fs/xfs/libxfs/xfs_dir2.h      | 1 -
>  fs/xfs/libxfs/xfs_dir2_leaf.c | 2 +-
>  fs/xfs/libxfs/xfs_dir2_node.c | 4 ++--
>  6 files changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/fs/xfs/libxfs/xfs_da_btree.h b/fs/xfs/libxfs/xfs_da_btree.h
> index 11b2d75f83ad..5e3e954fee77 100644
> --- a/fs/xfs/libxfs/xfs_da_btree.h
> +++ b/fs/xfs/libxfs/xfs_da_btree.h
> @@ -26,6 +26,7 @@ struct xfs_da_geometry {
>  	uint		node_ents;	/* # of entries in a danode */
>  	int		magicpct;	/* 37% of block size in bytes */
>  	xfs_dablk_t	datablk;	/* blockno of dir data v2 */
> +	int		leaf_hdr_size;	/* dir2 leaf header size */
>  	xfs_dablk_t	leafblk;	/* blockno of leaf data v2 */
>  	xfs_dablk_t	freeblk;	/* blockno of free data v2 */
>  };
> diff --git a/fs/xfs/libxfs/xfs_da_format.c b/fs/xfs/libxfs/xfs_da_format.c
> index ed21ce01502f..a3e87f4788e0 100644
> --- a/fs/xfs/libxfs/xfs_da_format.c
> +++ b/fs/xfs/libxfs/xfs_da_format.c
> @@ -570,7 +570,6 @@ static const struct xfs_dir_ops xfs_dir2_ops = {
>  	.data_entry_p = xfs_dir2_data_entry_p,
>  	.data_unused_p = xfs_dir2_data_unused_p,
>  
> -	.leaf_hdr_size = sizeof(struct xfs_dir2_leaf_hdr),
>  	.leaf_max_ents = xfs_dir2_max_leaf_ents,
>  
>  	.free_hdr_size = sizeof(struct xfs_dir2_free_hdr),
> @@ -612,7 +611,6 @@ static const struct xfs_dir_ops xfs_dir2_ftype_ops = {
>  	.data_entry_p = xfs_dir2_data_entry_p,
>  	.data_unused_p = xfs_dir2_data_unused_p,
>  
> -	.leaf_hdr_size = sizeof(struct xfs_dir2_leaf_hdr),
>  	.leaf_max_ents = xfs_dir2_max_leaf_ents,
>  
>  	.free_hdr_size = sizeof(struct xfs_dir2_free_hdr),
> @@ -654,7 +652,6 @@ static const struct xfs_dir_ops xfs_dir3_ops = {
>  	.data_entry_p = xfs_dir3_data_entry_p,
>  	.data_unused_p = xfs_dir3_data_unused_p,
>  
> -	.leaf_hdr_size = sizeof(struct xfs_dir3_leaf_hdr),
>  	.leaf_max_ents = xfs_dir3_max_leaf_ents,
>  
>  	.free_hdr_size = sizeof(struct xfs_dir3_free_hdr),
> diff --git a/fs/xfs/libxfs/xfs_dir2.c b/fs/xfs/libxfs/xfs_dir2.c
> index aef20ec6e140..94badb28fd1a 100644
> --- a/fs/xfs/libxfs/xfs_dir2.c
> +++ b/fs/xfs/libxfs/xfs_dir2.c
> @@ -122,10 +122,13 @@ xfs_da_mount(
>  	dageo->fsblog = mp->m_sb.sb_blocklog;
>  	dageo->blksize = xfs_dir2_dirblock_bytes(&mp->m_sb);
>  	dageo->fsbcount = 1 << mp->m_sb.sb_dirblklog;
> -	if (xfs_sb_version_hascrc(&mp->m_sb))
> +	if (xfs_sb_version_hascrc(&mp->m_sb)) {
>  		dageo->node_hdr_size = sizeof(struct xfs_da3_node_hdr);
> -	else
> +		dageo->leaf_hdr_size = sizeof(struct xfs_dir3_leaf_hdr);
> +	} else {
>  		dageo->node_hdr_size = sizeof(struct xfs_da_node_hdr);
> +		dageo->leaf_hdr_size = sizeof(struct xfs_dir2_leaf_hdr);
> +	}
>  
>  	/*
>  	 * Now we've set up the block conversion variables, we can calculate the
> diff --git a/fs/xfs/libxfs/xfs_dir2.h b/fs/xfs/libxfs/xfs_dir2.h
> index b46657974134..544adee5dd12 100644
> --- a/fs/xfs/libxfs/xfs_dir2.h
> +++ b/fs/xfs/libxfs/xfs_dir2.h
> @@ -72,7 +72,6 @@ struct xfs_dir_ops {
>  	struct xfs_dir2_data_unused *
>  		(*data_unused_p)(struct xfs_dir2_data_hdr *hdr);
>  
> -	int	leaf_hdr_size;
>  	int	(*leaf_max_ents)(struct xfs_da_geometry *geo);
>  
>  	int	free_hdr_size;
> diff --git a/fs/xfs/libxfs/xfs_dir2_leaf.c b/fs/xfs/libxfs/xfs_dir2_leaf.c
> index d6581f40f0a4..f72fd8182223 100644
> --- a/fs/xfs/libxfs/xfs_dir2_leaf.c
> +++ b/fs/xfs/libxfs/xfs_dir2_leaf.c
> @@ -1132,7 +1132,7 @@ xfs_dir3_leaf_log_header(
>  
>  	xfs_trans_log_buf(args->trans, bp,
>  			  (uint)((char *)&leaf->hdr - (char *)leaf),
> -			  args->dp->d_ops->leaf_hdr_size - 1);
> +			  args->geo->leaf_hdr_size - 1);
>  }
>  
>  /*
> diff --git a/fs/xfs/libxfs/xfs_dir2_node.c b/fs/xfs/libxfs/xfs_dir2_node.c
> index 76c896da8352..76f31909376e 100644
> --- a/fs/xfs/libxfs/xfs_dir2_node.c
> +++ b/fs/xfs/libxfs/xfs_dir2_node.c
> @@ -1334,7 +1334,7 @@ xfs_dir2_leafn_remove(
>  	 * Return indication of whether this leaf block is empty enough
>  	 * to justify trying to join it with a neighbor.
>  	 */
> -	*rval = (dp->d_ops->leaf_hdr_size +
> +	*rval = (args->geo->leaf_hdr_size +
>  		 (uint)sizeof(leafhdr.ents) * (leafhdr.count - leafhdr.stale)) <
>  		args->geo->magicpct;
>  	return 0;
> @@ -1440,7 +1440,7 @@ xfs_dir2_leafn_toosmall(
>  	xfs_dir3_leaf_check(dp, blk->bp);
>  
>  	count = leafhdr.count - leafhdr.stale;
> -	bytes = dp->d_ops->leaf_hdr_size + count * sizeof(ents[0]);
> +	bytes = state->args->geo->leaf_hdr_size + count * sizeof(ents[0]);
>  	if (bytes > (state->args->geo->blksize >> 1)) {
>  		/*
>  		 * Blk over 50%, don't try to join.
> -- 
> 2.20.1
> 



[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