[PATCH 0/7] Set/get accessor speedups

David Sterba
2025-07-01T17:23:58Z

Followup to [1] bringing refactoring that allows compiler to do more
optimizations and stack usage reduction. As the set/get helpers are
heavily used in many functions this improves performance. I will provide
some numbers later as I've done mostly functional tests. During the
development I've identified a few more possible optimizations to improve
performance, but this series is OK as is.

Overall effects of this series:

Stack:

btrfs_set_16 -72 (88 -> 16)
btrfs_get_32 -56 (80 -> 24)
btrfs_set_8 -72 (88 -> 16)
btrfs_set_64 -64 (88 -> 24)
btrfs_get_8 -72 (80 -> 8)
btrfs_get_16 -64 (80 -> 16)
btrfs_set_32 -64 (88 -> 24)
btrfs_get_64 -56 (80 -> 24)

NEW (48):
report_setget_bounds 48
LOST/NEW DELTA: +48
PRE/POST DELTA: -472

Code:

text data bss dec hex filename
1456601 115665 16088 1588354 183c82 pre/btrfs.ko
1454229 115665 16088 1585982 18333e post/btrfs.ko

DELTA: -2372

[1] https://lore.kernel.org/linux-btrfs/cover.1751032655.git.dsterba@suse.com/

David Sterba (7):
btrfs: accessors: simplify folio bounds checks
btrfs: accessors: use type sizeof constants directly
btrfs: accessors: inline eb bounds check and factor out the error
report
btrfs: accessors: compile-time fast path for u8
btrfs: accessors: compile-time fast path for u16
btrfs: accessors: set target address at initialization
btrfs: accessors: factor out split memcpy with two sources

fs/btrfs/accessors.c | 84 +++++++++++++++++++++++++++-----------------
1 file changed, 51 insertions(+), 33 deletions(-)

--
2.49.0