diff mbox series

btrfs: reduce size and overhead of extent_map_block_end()

Message ID 9003408d1f29de77deef59c6ed6e5bf1d98b91ab.1721746528.git.fdmanana@suse.com (mailing list archive)
State New, archived
Headers show
Series btrfs: reduce size and overhead of extent_map_block_end() | expand

Commit Message

Filipe Manana July 23, 2024, 3:16 p.m. UTC
From: Filipe Manana <fdmanana@suse.com>

At extent_map_block_end() we are calling the inline functions
extent_map_block_start() and extent_map_block_len() multiple times, which
results in expanding their code multiple times, increasing the compiled
code size and repeating the computations those functions do.

Improve this by caching their results in local variables.

The size of the module before this change:

   $ size fs/btrfs/btrfs.ko
      text	   data	    bss	    dec	    hex	filename
   1755770	 163800	  16920	1936490	 1d8c6a	fs/btrfs/btrfs.ko

And after this change:

   $ size fs/btrfs/btrfs.ko
      text	   data	    bss	    dec	    hex	filename
   1755656	 163800	  16920	1936376	 1d8bf8	fs/btrfs/btrfs.ko

Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
 fs/btrfs/extent_map.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

Comments

Josef Bacik July 23, 2024, 3:40 p.m. UTC | #1
On Tue, Jul 23, 2024 at 04:16:03PM +0100, fdmanana@kernel.org wrote:
> From: Filipe Manana <fdmanana@suse.com>
> 
> At extent_map_block_end() we are calling the inline functions
> extent_map_block_start() and extent_map_block_len() multiple times, which
> results in expanding their code multiple times, increasing the compiled
> code size and repeating the computations those functions do.
> 
> Improve this by caching their results in local variables.
> 
> The size of the module before this change:
> 
>    $ size fs/btrfs/btrfs.ko
>       text	   data	    bss	    dec	    hex	filename
>    1755770	 163800	  16920	1936490	 1d8c6a	fs/btrfs/btrfs.ko
> 
> And after this change:
> 
>    $ size fs/btrfs/btrfs.ko
>       text	   data	    bss	    dec	    hex	filename
>    1755656	 163800	  16920	1936376	 1d8bf8	fs/btrfs/btrfs.ko
> 
> Signed-off-by: Filipe Manana <fdmanana@suse.com>
> ---

Reviewed-by: Josef Bacik <josef@toxicpanda.com>

Thanks,

Josef
Qu Wenruo July 23, 2024, 9:52 p.m. UTC | #2
在 2024/7/24 00:46, fdmanana@kernel.org 写道:
> From: Filipe Manana <fdmanana@suse.com>
>
> At extent_map_block_end() we are calling the inline functions
> extent_map_block_start() and extent_map_block_len() multiple times, which
> results in expanding their code multiple times, increasing the compiled
> code size and repeating the computations those functions do.
>
> Improve this by caching their results in local variables.
>
> The size of the module before this change:
>
>     $ size fs/btrfs/btrfs.ko
>        text	   data	    bss	    dec	    hex	filename
>     1755770	 163800	  16920	1936490	 1d8c6a	fs/btrfs/btrfs.ko
>
> And after this change:
>
>     $ size fs/btrfs/btrfs.ko
>        text	   data	    bss	    dec	    hex	filename
>     1755656	 163800	  16920	1936376	 1d8bf8	fs/btrfs/btrfs.ko
>
> Signed-off-by: Filipe Manana <fdmanana@suse.com>

Reviewed-by: Qu Wenruo <wqu@suse.com>

Thanks,
Qu

> ---
>   fs/btrfs/extent_map.c | 9 ++++++---
>   1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/fs/btrfs/extent_map.c b/fs/btrfs/extent_map.c
> index f85f0172b58b..806a8954b3d5 100644
> --- a/fs/btrfs/extent_map.c
> +++ b/fs/btrfs/extent_map.c
> @@ -192,10 +192,13 @@ static inline u64 extent_map_block_len(const struct extent_map *em)
>
>   static inline u64 extent_map_block_end(const struct extent_map *em)
>   {
> -	if (extent_map_block_start(em) + extent_map_block_len(em) <
> -	    extent_map_block_start(em))
> +	const u64 block_start = extent_map_block_start(em);
> +	const u64 block_end = block_start + extent_map_block_len(em);
> +
> +	if (block_end < block_start)
>   		return (u64)-1;
> -	return extent_map_block_start(em) + extent_map_block_len(em);
> +
> +	return block_end;
>   }
>
>   static bool can_merge_extent_map(const struct extent_map *em)
diff mbox series

Patch

diff --git a/fs/btrfs/extent_map.c b/fs/btrfs/extent_map.c
index f85f0172b58b..806a8954b3d5 100644
--- a/fs/btrfs/extent_map.c
+++ b/fs/btrfs/extent_map.c
@@ -192,10 +192,13 @@  static inline u64 extent_map_block_len(const struct extent_map *em)
 
 static inline u64 extent_map_block_end(const struct extent_map *em)
 {
-	if (extent_map_block_start(em) + extent_map_block_len(em) <
-	    extent_map_block_start(em))
+	const u64 block_start = extent_map_block_start(em);
+	const u64 block_end = block_start + extent_map_block_len(em);
+
+	if (block_end < block_start)
 		return (u64)-1;
-	return extent_map_block_start(em) + extent_map_block_len(em);
+
+	return block_end;
 }
 
 static bool can_merge_extent_map(const struct extent_map *em)