btrfs: remove redundant local var in read_block_for_search
diff mbox series

Message ID 20200527101059.7391-1-nborisov@suse.com
State New
Headers show
Series
  • btrfs: remove redundant local var in read_block_for_search
Related show

Commit Message

Nikolay Borisov May 27, 2020, 10:10 a.m. UTC
The local 'b' variable is only used to directly read values from passed
extent buffer. So eliminate  it and directly use the input parameter. Furthermore
this shrinks the size of the following functions:

./scripts/bloat-o-meter ctree.orig fs/btrfs/ctree.o
add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-73 (-73)
Function                                     old     new   delta
read_block_for_search.isra                   876     871      -5
push_node_left                              1112    1044     -68
Total: Before=50348, After=50275, chg -0.14%

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
---
 fs/btrfs/ctree.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

--
2.17.1

Comments

Johannes Thumshirn May 27, 2020, 11:57 a.m. UTC | #1
Looks good,
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
David Sterba May 27, 2020, 1:56 p.m. UTC | #2
On Wed, May 27, 2020 at 01:10:59PM +0300, Nikolay Borisov wrote:
> The local 'b' variable is only used to directly read values from passed
> extent buffer. So eliminate  it and directly use the input parameter. Furthermore
> this shrinks the size of the following functions:
> 
> ./scripts/bloat-o-meter ctree.orig fs/btrfs/ctree.o
> add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-73 (-73)
> Function                                     old     new   delta
> read_block_for_search.isra                   876     871      -5
> push_node_left                              1112    1044     -68
> Total: Before=50348, After=50275, chg -0.14%
> 
> Signed-off-by: Nikolay Borisov <nborisov@suse.com>

Added to misc-next, thanks.
David Sterba May 27, 2020, 2:02 p.m. UTC | #3
On Wed, May 27, 2020 at 01:10:59PM +0300, Nikolay Borisov wrote:
> The local 'b' variable is only used to directly read values from passed
> extent buffer. So eliminate  it and directly use the input parameter. Furthermore
> this shrinks the size of the following functions:
> 
> ./scripts/bloat-o-meter ctree.orig fs/btrfs/ctree.o
> add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-73 (-73)
> Function                                     old     new   delta
> read_block_for_search.isra                   876     871      -5
> push_node_left                              1112    1044     -68
> -	struct extent_buffer *b = *eb_ret;

> -	blocknr = btrfs_node_blockptr(b, slot);
> -	gen = btrfs_node_ptr_generation(b, slot);
> -	parent_level = btrfs_header_level(b);
> -	btrfs_node_key_to_cpu(b, &first_key, slot);
> +	blocknr = btrfs_node_blockptr(*eb_ret, slot);
> +	gen = btrfs_node_ptr_generation(*eb_ret, slot);
> +	parent_level = btrfs_header_level(*eb_ret);
> +	btrfs_node_key_to_cpu(*eb_ret, &first_key, slot);

It's interesting how such trivial and obvious change can improve the
code generation. The removed indirection resulted in smaller function
push_node_left that is not even called directly, but as there are lot of
static helpers it's some intra-procedural pass that can utilize the
reduced variable indirection.

Patch
diff mbox series

diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
index 3ab307b4b294..72a3389d2d87 100644
--- a/fs/btrfs/ctree.c
+++ b/fs/btrfs/ctree.c
@@ -2335,16 +2335,15 @@  read_block_for_search(struct btrfs_root *root, struct btrfs_path *p,
 	struct btrfs_fs_info *fs_info = root->fs_info;
 	u64 blocknr;
 	u64 gen;
-	struct extent_buffer *b = *eb_ret;
 	struct extent_buffer *tmp;
 	struct btrfs_key first_key;
 	int ret;
 	int parent_level;

-	blocknr = btrfs_node_blockptr(b, slot);
-	gen = btrfs_node_ptr_generation(b, slot);
-	parent_level = btrfs_header_level(b);
-	btrfs_node_key_to_cpu(b, &first_key, slot);
+	blocknr = btrfs_node_blockptr(*eb_ret, slot);
+	gen = btrfs_node_ptr_generation(*eb_ret, slot);
+	parent_level = btrfs_header_level(*eb_ret);
+	btrfs_node_key_to_cpu(*eb_ret, &first_key, slot);

 	tmp = find_extent_buffer(fs_info, blocknr);
 	if (tmp) {