bpf: Remove unnecessary check when updating LPM trie
authorHou Tao <houtao1@huawei.com>
Fri, 6 Dec 2024 11:06:14 +0000 (19:06 +0800)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 6 Dec 2024 17:14:25 +0000 (09:14 -0800)
When "node->prefixlen == matchlen" is true, it means that the node is
fully matched. If "node->prefixlen == key->prefixlen" is false, it means
the prefix length of key is greater than the prefix length of node,
otherwise, matchlen will not be equal with node->prefixlen. However, it
also implies that the prefix length of node must be less than
max_prefixlen.

Therefore, "node->prefixlen == trie->max_prefixlen" will always be false
when the check of "node->prefixlen == key->prefixlen" returns false.
Remove this unnecessary comparison.

Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Hou Tao <houtao1@huawei.com>
Link: https://lore.kernel.org/r/20241206110622.1161752-2-houtao@huaweicloud.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/lpm_trie.c

index 9b60eda0f727b36aee2b5a82f946a78a3e85fbce..73fd593d3745144b71b2c34fed5b8ae26b414a5f 100644 (file)
@@ -364,8 +364,7 @@ static long trie_update_elem(struct bpf_map *map,
                matchlen = longest_prefix_match(trie, node, key);
 
                if (node->prefixlen != matchlen ||
-                   node->prefixlen == key->prefixlen ||
-                   node->prefixlen == trie->max_prefixlen)
+                   node->prefixlen == key->prefixlen)
                        break;
 
                next_bit = extract_bit(key->data, node->prefixlen);