Skip to content

Commit ab138a9

Browse files
committed
btrfs: accessors: set target address at initialization
The target address for the read/write can be simplified as it's the same expression for the first folio. This improves the generated code as the folio address does not have to be cached on stack. Stack usage reduction: btrfs_set_32 -8 (32 -> 24) btrfs_set_64 -8 (32 -> 24) btrfs_get_16 -8 (24 -> 16) Code size reduction: text data bss dec hex filename 1454459 115665 16088 1586212 183424 pre/btrfs.ko 1454279 115665 16088 1586032 183370 post/btrfs.ko DELTA: -180 Reviewed-by: Boris Burkov <boris@bur.io> Signed-off-by: David Sterba <dsterba@suse.com>
1 parent 9bd129c commit ab138a9

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

fs/btrfs/accessors.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ u##bits btrfs_get_##bits(const struct extent_buffer *eb, \
4747
const unsigned long idx = get_eb_folio_index(eb, member_offset);\
4848
const unsigned long oil = get_eb_offset_in_folio(eb, \
4949
member_offset);\
50-
char *kaddr = folio_address(eb->folios[idx]); \
50+
char *kaddr = folio_address(eb->folios[idx]) + oil; \
5151
const int part = eb->folio_size - oil; \
5252
u8 lebytes[sizeof(u##bits)]; \
5353
\
@@ -57,14 +57,14 @@ u##bits btrfs_get_##bits(const struct extent_buffer *eb, \
5757
} \
5858
if (INLINE_EXTENT_BUFFER_PAGES == 1 || sizeof(u##bits) == 1 || \
5959
likely(sizeof(u##bits) <= part)) \
60-
return get_unaligned_le##bits(kaddr + oil); \
60+
return get_unaligned_le##bits(kaddr); \
6161
\
6262
if (sizeof(u##bits) == 2) { \
63-
lebytes[0] = *(kaddr + oil); \
63+
lebytes[0] = *kaddr; \
6464
kaddr = folio_address(eb->folios[idx + 1]); \
6565
lebytes[1] = *kaddr; \
6666
} else { \
67-
memcpy(lebytes, kaddr + oil, part); \
67+
memcpy(lebytes, kaddr, part); \
6868
kaddr = folio_address(eb->folios[idx + 1]); \
6969
memcpy(lebytes + part, kaddr, sizeof(u##bits) - part); \
7070
} \
@@ -77,7 +77,7 @@ void btrfs_set_##bits(const struct extent_buffer *eb, void *ptr, \
7777
const unsigned long idx = get_eb_folio_index(eb, member_offset);\
7878
const unsigned long oil = get_eb_offset_in_folio(eb, \
7979
member_offset);\
80-
char *kaddr = folio_address(eb->folios[idx]); \
80+
char *kaddr = folio_address(eb->folios[idx]) + oil; \
8181
const int part = eb->folio_size - oil; \
8282
u8 lebytes[sizeof(u##bits)]; \
8383
\
@@ -87,16 +87,16 @@ void btrfs_set_##bits(const struct extent_buffer *eb, void *ptr, \
8787
} \
8888
if (INLINE_EXTENT_BUFFER_PAGES == 1 || sizeof(u##bits) == 1 || \
8989
likely(sizeof(u##bits) <= part)) { \
90-
put_unaligned_le##bits(val, kaddr + oil); \
90+
put_unaligned_le##bits(val, kaddr); \
9191
return; \
9292
} \
9393
put_unaligned_le##bits(val, lebytes); \
9494
if (sizeof(u##bits) == 2) { \
95-
*(kaddr + oil) = lebytes[0]; \
95+
*kaddr = lebytes[0]; \
9696
kaddr = folio_address(eb->folios[idx + 1]); \
9797
*kaddr = lebytes[1]; \
9898
} else { \
99-
memcpy(kaddr + oil, lebytes, part); \
99+
memcpy(kaddr, lebytes, part); \
100100
kaddr = folio_address(eb->folios[idx + 1]); \
101101
memcpy(kaddr, lebytes + part, sizeof(u##bits) - part); \
102102
} \

0 commit comments

Comments
 (0)