All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brian Foster <bfoster@redhat.com>
To: Dave Chinner <david@fromorbit.com>
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH 17/16] xfs: remove redundant geometry information from xfs_da_state
Date: Mon, 2 Jun 2014 10:03:24 -0400	[thread overview]
Message-ID: <20140602140324.GA24196@bfoster.bfoster> (raw)
In-Reply-To: <20140530233906.GL6677@dastard>

On Sat, May 31, 2014 at 09:39:06AM +1000, Dave Chinner wrote:
> 
> From: Dave Chinner <dchinner@redhat.com>
> 
> 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@redhat.com>
> ---
>  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@redhat.com>

>  	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@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs

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

  reply	other threads:[~2014-06-02 14:03 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-28  6:04 [PATCH 00/16 V3] xfs: introduce struct xfs_da_geometry Dave Chinner
2014-05-28  6:04 ` [PATCH 01/16] xfs: introduce directory geometry structure Dave Chinner
2014-05-30 19:05   ` Brian Foster
2014-05-28  6:04 ` [PATCH 02/16] xfs: move directory block translatiosn to xfs_dir2_priv.h Dave Chinner
2014-05-28  6:04 ` [PATCH 03/16] xfs: kill XFS_DIR2...FIRSTDB macros Dave Chinner
2014-05-28  6:04 ` [PATCH 04/16] xfs: convert dir byte/off conversion to xfs_da_geometry Dave Chinner
2014-05-28  6:04 ` [PATCH 05/16] xfs: convert directory dablk " Dave Chinner
2014-05-28  6:04 ` [PATCH 06/16] xfs: convert directory db " Dave Chinner
2014-05-28  6:04 ` [PATCH 07/16] xfs: convert directory segment limits " Dave Chinner
2014-05-28  6:04 ` [PATCH 08/16] xfs: convert m_dirblkfsbs " Dave Chinner
2014-05-28  6:04 ` [PATCH 09/16] xfs: convert m_dirblksize " Dave Chinner
2014-05-28  6:04 ` [PATCH 10/16] xfs: convert dir/attr btree threshold " Dave Chinner
2014-05-28  6:04 ` [PATCH 11/16] xfs: move node entry counts " Dave Chinner
2014-05-28  6:04 ` [PATCH 12/16] xfs: reduce direct usage of mp->m_dir_geo Dave Chinner
2014-05-30 19:05   ` Brian Foster
2014-05-28  6:04 ` [PATCH 13/16] xfs: remove mp->m_dir_geo from directory logging Dave Chinner
2014-05-28  6:04 ` [PATCH 14/16] xfs: use xfs_da_geometry for block size in attr code Dave Chinner
2014-05-28  6:04 ` [PATCH 15/16] xfs: pass xfs_da_args to xfs_attr_leaf_newentsize Dave Chinner
2014-05-28  6:04 ` [PATCH 16/16] xfs: repalce attr LBSIZE with xfs_da_geometry Dave Chinner
2014-05-30 19:05 ` [PATCH 00/16 V3] xfs: introduce struct xfs_da_geometry Brian Foster
2014-05-30 23:37   ` Dave Chinner
2014-05-30 23:39 ` [PATCH 17/16] xfs: remove redundant geometry information from xfs_da_state Dave Chinner
2014-06-02 14:03   ` Brian Foster [this message]
2014-06-05  1:26     ` Dave Chinner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140602140324.GA24196@bfoster.bfoster \
    --to=bfoster@redhat.com \
    --cc=david@fromorbit.com \
    --cc=xfs@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.