Skip to content

Commit 5afe85b

Browse files
fdmananakdave
authored andcommitted
btrfs: mark leaf space and overflow checks as unlikely on insert and extension
We have several sanity checks when inserting or extending items in a btree that verify we didn't overflow the leaf or access a slot beyond the last one. These are cases that are never expected to be hit so mark them as unlikely, allowing the compiler to potentially generate better code. Reviewed-by: Qu Wenruo <wqu@suse.com> Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
1 parent b0e30e3 commit 5afe85b

1 file changed

Lines changed: 7 additions & 7 deletions

File tree

fs/btrfs/ctree.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3086,7 +3086,7 @@ int btrfs_leaf_free_space(const struct extent_buffer *leaf)
30863086
int ret;
30873087

30883088
ret = BTRFS_LEAF_DATA_SIZE(fs_info) - leaf_space_used(leaf, 0, nritems);
3089-
if (ret < 0) {
3089+
if (unlikely(ret < 0)) {
30903090
btrfs_crit(fs_info,
30913091
"leaf free space ret %d, leaf data size %lu, used %d nritems %d",
30923092
ret,
@@ -4075,7 +4075,7 @@ void btrfs_truncate_item(struct btrfs_trans_handle *trans,
40754075
btrfs_set_item_size(leaf, slot, new_size);
40764076
btrfs_mark_buffer_dirty(trans, leaf);
40774077

4078-
if (btrfs_leaf_free_space(leaf) < 0) {
4078+
if (unlikely(btrfs_leaf_free_space(leaf) < 0)) {
40794079
btrfs_print_leaf(leaf);
40804080
BUG();
40814081
}
@@ -4108,7 +4108,7 @@ void btrfs_extend_item(struct btrfs_trans_handle *trans,
41084108
old_data = btrfs_item_data_end(leaf, slot);
41094109

41104110
BUG_ON(slot < 0);
4111-
if (slot >= nritems) {
4111+
if (unlikely(slot >= nritems)) {
41124112
btrfs_print_leaf(leaf);
41134113
btrfs_crit(leaf->fs_info, "slot %d too large, nritems %d",
41144114
slot, nritems);
@@ -4135,7 +4135,7 @@ void btrfs_extend_item(struct btrfs_trans_handle *trans,
41354135
btrfs_set_item_size(leaf, slot, old_size + data_size);
41364136
btrfs_mark_buffer_dirty(trans, leaf);
41374137

4138-
if (btrfs_leaf_free_space(leaf) < 0) {
4138+
if (unlikely(btrfs_leaf_free_space(leaf) < 0)) {
41394139
btrfs_print_leaf(leaf);
41404140
BUG();
41414141
}
@@ -4183,7 +4183,7 @@ static void setup_items_for_insert(struct btrfs_trans_handle *trans,
41834183
data_end = leaf_data_end(leaf);
41844184
total_size = batch->total_data_size + (batch->nr * sizeof(struct btrfs_item));
41854185

4186-
if (btrfs_leaf_free_space(leaf) < total_size) {
4186+
if (unlikely(btrfs_leaf_free_space(leaf) < total_size)) {
41874187
btrfs_print_leaf(leaf);
41884188
btrfs_crit(fs_info, "not enough freespace need %u have %d",
41894189
total_size, btrfs_leaf_free_space(leaf));
@@ -4193,7 +4193,7 @@ static void setup_items_for_insert(struct btrfs_trans_handle *trans,
41934193
if (slot != nritems) {
41944194
unsigned int old_data = btrfs_item_data_end(leaf, slot);
41954195

4196-
if (old_data < data_end) {
4196+
if (unlikely(old_data < data_end)) {
41974197
btrfs_print_leaf(leaf);
41984198
btrfs_crit(fs_info,
41994199
"item at slot %d with data offset %u beyond data end of leaf %u",
@@ -4232,7 +4232,7 @@ static void setup_items_for_insert(struct btrfs_trans_handle *trans,
42324232
btrfs_set_header_nritems(leaf, nritems + batch->nr);
42334233
btrfs_mark_buffer_dirty(trans, leaf);
42344234

4235-
if (btrfs_leaf_free_space(leaf) < 0) {
4235+
if (unlikely(btrfs_leaf_free_space(leaf) < 0)) {
42364236
btrfs_print_leaf(leaf);
42374237
BUG();
42384238
}

0 commit comments

Comments
 (0)