Re: [PATCH 17/16] xfs: remove redundant geometry information from xfs_da_state

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

 



On Sat, May 31, 2014 at 09:39:06AM +1000, Dave Chinner wrote:
> 
> From: Dave Chinner <dchinner@xxxxxxxxxx>
> 
> It's carried in state->args->geo, so there's no need to duplicate it
> and use more stack space than necessary.
> 
> Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
> ---
>  fs/xfs/xfs_attr.c      |  8 --------
>  fs/xfs/xfs_attr_leaf.c | 19 ++++++++++---------
>  fs/xfs/xfs_da_btree.c  | 13 +++++++------
>  fs/xfs/xfs_da_btree.h  |  2 --
>  fs/xfs/xfs_dir2_node.c | 13 +++----------
>  5 files changed, 20 insertions(+), 35 deletions(-)
> 
> diff --git a/fs/xfs/xfs_attr.c b/fs/xfs/xfs_attr.c
> index 470a22d..bfe36fc 100644
> --- a/fs/xfs/xfs_attr.c
> +++ b/fs/xfs/xfs_attr.c
> @@ -896,8 +896,6 @@ restart:
>  	state = xfs_da_state_alloc();
>  	state->args = args;
>  	state->mp = mp;
> -	state->blocksize = args->geo->blksize;
> -	state->node_ents = args->geo->node_ents;
>  
>  	/*
>  	 * Search to see if name already exists, and get back a pointer
> @@ -1075,8 +1073,6 @@ restart:
>  		state = xfs_da_state_alloc();
>  		state->args = args;
>  		state->mp = mp;
> -		state->blocksize = args->geo->blksize;
> -		state->node_ents = args->geo->node_ents;
>  		state->inleaf = 0;
>  		error = xfs_da3_node_lookup_int(state, &retval);
>  		if (error)
> @@ -1167,8 +1163,6 @@ xfs_attr_node_removename(xfs_da_args_t *args)
>  	state = xfs_da_state_alloc();
>  	state->args = args;
>  	state->mp = dp->i_mount;
> -	state->blocksize = args->geo->blksize;
> -	state->node_ents = args->geo->node_ents;
>  
>  	/*
>  	 * Search to see if name exists, and get back a pointer to it.
> @@ -1430,8 +1424,6 @@ xfs_attr_node_get(xfs_da_args_t *args)
>  	state = xfs_da_state_alloc();
>  	state->args = args;
>  	state->mp = args->dp->i_mount;
> -	state->blocksize = args->geo->blksize;
> -	state->node_ents = args->geo->node_ents;
>  
>  	/*
>  	 * Search to see if name exists, and get back a pointer to it.
> diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c
> index ae33b14..28712d2 100644
> --- a/fs/xfs/xfs_attr_leaf.c
> +++ b/fs/xfs/xfs_attr_leaf.c
> @@ -1494,8 +1494,8 @@ xfs_attr3_leaf_rebalance(
>  
>  	xfs_attr3_leaf_hdr_to_disk(leaf1, &ichdr1);
>  	xfs_attr3_leaf_hdr_to_disk(leaf2, &ichdr2);
> -	xfs_trans_log_buf(args->trans, blk1->bp, 0, state->blocksize-1);
> -	xfs_trans_log_buf(args->trans, blk2->bp, 0, state->blocksize-1);
> +	xfs_trans_log_buf(args->trans, blk1->bp, 0, args->geo->blksize - 1);
> +	xfs_trans_log_buf(args->trans, blk2->bp, 0, args->geo->blksize - 1);
>  
>  	/*
>  	 * Copy out last hashval in each block for B-tree code.
> @@ -1592,7 +1592,7 @@ xfs_attr3_leaf_figure_balance(
>  	half += ichdr1->usedbytes + ichdr2->usedbytes +
>  			xfs_attr_leaf_newentsize(state->args, NULL);
>  	half /= 2;
> -	lastdelta = state->blocksize;
> +	lastdelta = state->args->geo->blksize;
>  	entry = xfs_attr3_leaf_entryp(leaf1);
>  	for (count = index = 0; count < max; entry++, index++, count++) {
>  
> @@ -1690,7 +1690,7 @@ xfs_attr3_leaf_toosmall(
>  	bytes = xfs_attr3_leaf_hdr_size(leaf) +
>  		ichdr.count * sizeof(xfs_attr_leaf_entry_t) +
>  		ichdr.usedbytes;
> -	if (bytes > (state->blocksize >> 1)) {
> +	if (bytes > (state->args->geo->blksize >> 1)) {
>  		*action = 0;	/* blk over 50%, don't try to join */
>  		return(0);
>  	}
> @@ -1744,7 +1744,8 @@ xfs_attr3_leaf_toosmall(
>  
>  		xfs_attr3_leaf_hdr_from_disk(&ichdr2, bp->b_addr);
>  
> -		bytes = state->blocksize - (state->blocksize >> 2) -
> +		bytes = state->args->geo->blksize -
> +			(state->args->geo->blksize >> 2) -
>  			ichdr.usedbytes - ichdr2.usedbytes -
>  			((ichdr.count + ichdr2.count) *
>  					sizeof(xfs_attr_leaf_entry_t)) -
> @@ -1997,7 +1998,7 @@ xfs_attr3_leaf_unbalance(
>  		struct xfs_attr_leafblock *tmp_leaf;
>  		struct xfs_attr3_icleaf_hdr tmphdr;
>  
> -		tmp_leaf = kmem_zalloc(state->blocksize, KM_SLEEP);
> +		tmp_leaf = kmem_zalloc(state->args->geo->blksize, KM_SLEEP);
>  
>  		/*
>  		 * Copy the header into the temp leaf so that all the stuff
> @@ -2010,7 +2011,7 @@ xfs_attr3_leaf_unbalance(
>  		tmphdr.magic = savehdr.magic;
>  		tmphdr.forw = savehdr.forw;
>  		tmphdr.back = savehdr.back;
> -		tmphdr.firstused = state->blocksize;
> +		tmphdr.firstused = state->args->geo->blksize;
>  
>  		/* write the header to the temp buffer to initialise it */
>  		xfs_attr3_leaf_hdr_to_disk(tmp_leaf, &tmphdr);
> @@ -2035,14 +2036,14 @@ xfs_attr3_leaf_unbalance(
>  						tmp_leaf, &tmphdr, tmphdr.count,
>  						drophdr.count);
>  		}
> -		memcpy(save_leaf, tmp_leaf, state->blocksize);
> +		memcpy(save_leaf, tmp_leaf, state->args->geo->blksize);
>  		savehdr = tmphdr; /* struct copy */
>  		kmem_free(tmp_leaf);
>  	}
>  
>  	xfs_attr3_leaf_hdr_to_disk(save_leaf, &savehdr);
>  	xfs_trans_log_buf(state->args->trans, save_blk->bp, 0,
> -					   state->blocksize - 1);
> +					   state->args->geo->blksize - 1);
>  
>  	/*
>  	 * Copy out last hashval in each block for B-tree code.
> diff --git a/fs/xfs/xfs_da_btree.c b/fs/xfs/xfs_da_btree.c
> index f935370..2da9922 100644
> --- a/fs/xfs/xfs_da_btree.c
> +++ b/fs/xfs/xfs_da_btree.c
> @@ -663,7 +663,7 @@ xfs_da3_node_split(
>  	/*
>  	 * Do we have to split the node?
>  	 */
> -	if (nodehdr.count + newcount > state->node_ents) {
> +	if (nodehdr.count + newcount > state->args->geo->node_ents) {
>  		/*
>  		 * Allocate a new node, add to the doubly linked chain of
>  		 * nodes, then move some of our excess entries into it.
> @@ -1089,14 +1089,15 @@ xfs_da3_root_join(
>  	 * that could occur. For dir3 blocks we also need to update the block
>  	 * number in the buffer header.
>  	 */
> -	memcpy(root_blk->bp->b_addr, bp->b_addr, state->blocksize);
> +	memcpy(root_blk->bp->b_addr, bp->b_addr, state->args->geo->blksize);
>  	root_blk->bp->b_ops = bp->b_ops;
>  	xfs_trans_buf_copy_type(root_blk->bp, bp);
>  	if (oldroothdr.magic == XFS_DA3_NODE_MAGIC) {
>  		struct xfs_da3_blkinfo *da3 = root_blk->bp->b_addr;
>  		da3->blkno = cpu_to_be64(root_blk->bp->b_bn);
>  	}
> -	xfs_trans_log_buf(args->trans, root_blk->bp, 0, state->blocksize - 1);
> +	xfs_trans_log_buf(args->trans, root_blk->bp, 0,
> +			  state->args->geo->blksize - 1);

FYI, you've got a local args pointer in xfs_da3_root_join().

Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx>

>  	error = xfs_da_shrink_inode(args, child, bp);
>  	return(error);
>  }
> @@ -1139,7 +1140,7 @@ xfs_da3_node_toosmall(
>  	info = blk->bp->b_addr;
>  	node = (xfs_da_intnode_t *)info;
>  	dp->d_ops->node_hdr_from_disk(&nodehdr, node);
> -	if (nodehdr.count > (state->node_ents >> 1)) {
> +	if (nodehdr.count > (state->args->geo->node_ents >> 1)) {
>  		*action = 0;	/* blk over 50%, don't try to join */
>  		return(0);	/* blk over 50%, don't try to join */
>  	}
> @@ -1176,8 +1177,8 @@ xfs_da3_node_toosmall(
>  	 * We prefer coalescing with the lower numbered sibling so as
>  	 * to shrink a directory over time.
>  	 */
> -	count  = state->node_ents;
> -	count -= state->node_ents >> 2;
> +	count  = state->args->geo->node_ents;
> +	count -= state->args->geo->node_ents >> 2;
>  	count -= nodehdr.count;
>  
>  	/* start with smaller blk num */
> diff --git a/fs/xfs/xfs_da_btree.h b/fs/xfs/xfs_da_btree.h
> index 0ac63ad..6e153e3 100644
> --- a/fs/xfs/xfs_da_btree.h
> +++ b/fs/xfs/xfs_da_btree.h
> @@ -128,8 +128,6 @@ typedef struct xfs_da_state_path {
>  typedef struct xfs_da_state {
>  	xfs_da_args_t		*args;		/* filename arguments */
>  	struct xfs_mount	*mp;		/* filesystem mount point */
> -	unsigned int		blocksize;	/* logical block size */
> -	unsigned int		node_ents;	/* how many entries in danode */
>  	xfs_da_state_path_t	path;		/* search/split paths */
>  	xfs_da_state_path_t	altpath;	/* alternate path for join */
>  	unsigned char		inleaf;		/* insert into 1->lf, 0->splf */
> diff --git a/fs/xfs/xfs_dir2_node.c b/fs/xfs/xfs_dir2_node.c
> index 65df8cb..da43d30 100644
> --- a/fs/xfs/xfs_dir2_node.c
> +++ b/fs/xfs/xfs_dir2_node.c
> @@ -1414,7 +1414,7 @@ xfs_dir2_leafn_toosmall(
>  
>  	count = leafhdr.count - leafhdr.stale;
>  	bytes = dp->d_ops->leaf_hdr_size + count * sizeof(ents[0]);
> -	if (bytes > (state->blocksize >> 1)) {
> +	if (bytes > (state->args->geo->blksize >> 1)) {
>  		/*
>  		 * Blk over 50%, don't try to join.
>  		 */
> @@ -1467,7 +1467,8 @@ xfs_dir2_leafn_toosmall(
>  		 * Count bytes in the two blocks combined.
>  		 */
>  		count = leafhdr.count - leafhdr.stale;
> -		bytes = state->blocksize - (state->blocksize >> 2);
> +		bytes = state->args->geo->blksize -
> +			(state->args->geo->blksize >> 2);
>  
>  		leaf = bp->b_addr;
>  		dp->d_ops->leaf_hdr_from_disk(&hdr2, leaf);
> @@ -1591,8 +1592,6 @@ xfs_dir2_node_addname(
>  	state = xfs_da_state_alloc();
>  	state->args = args;
>  	state->mp = args->dp->i_mount;
> -	state->blocksize = args->geo->blksize;
> -	state->node_ents = args->geo->node_ents;
>  	/*
>  	 * Look up the name.  We're not supposed to find it, but
>  	 * this gives us the insertion point.
> @@ -2037,8 +2036,6 @@ xfs_dir2_node_lookup(
>  	state = xfs_da_state_alloc();
>  	state->args = args;
>  	state->mp = args->dp->i_mount;
> -	state->blocksize = args->geo->blksize;
> -	state->node_ents = args->geo->node_ents;
>  	/*
>  	 * Fill in the path to the entry in the cursor.
>  	 */
> @@ -2092,8 +2089,6 @@ xfs_dir2_node_removename(
>  	state = xfs_da_state_alloc();
>  	state->args = args;
>  	state->mp = args->dp->i_mount;
> -	state->blocksize = args->geo->blksize;
> -	state->node_ents = args->geo->node_ents;
>  
>  	/* Look up the entry we're deleting, set up the cursor. */
>  	error = xfs_da3_node_lookup_int(state, &rval);
> @@ -2162,8 +2157,6 @@ xfs_dir2_node_replace(
>  	state = xfs_da_state_alloc();
>  	state->args = args;
>  	state->mp = args->dp->i_mount;
> -	state->blocksize = args->geo->blksize;
> -	state->node_ents = args->geo->node_ents;
>  	inum = args->inumber;
>  	/*
>  	 * Lookup the entry to change in the btree.
> 
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs




[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux