bpf: Fix a compilation failure with clang lto build
When building the kernel with clang lto (CONFIG_LTO_CLANG_FULL=y), the following compilation error will appear: $ make LLVM=1 LLVM_IAS=1 -j ... ld.lld: error: ld-temp.o <inline asm>:26889:1: symbol 'cgroup_storage_map_btf_ids' is already defined cgroup_storage_map_btf_ids:; ^ make[1]: *** [/.../bpf-next/scripts/Makefile.vmlinux_o:61: vmlinux.o] Error 1 In local_storage.c, we have BTF_ID_LIST_SINGLE(cgroup_storage_map_btf_ids, struct, bpf_local_storage_map) Commitc4bcfb38a9
("bpf: Implement cgroup storage available to non-cgroup-attached bpf progs") added the above identical BTF_ID_LIST_SINGLE definition in bpf_cgrp_storage.c. With duplicated definitions, llvm linker complains with lto build. Also, extracting btf_id of 'struct bpf_local_storage_map' is defined four times for sk, inode, task and cgrp local storages. Let us define a single global one with a different name than cgroup_storage_map_btf_ids, which also fixed the lto compilation error. Fixes:c4bcfb38a9
("bpf: Implement cgroup storage available to non-cgroup-attached bpf progs") Signed-off-by: Yonghong Song <yhs@fb.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/bpf/20221130052147.1591625-1-yhs@fb.com
This commit is contained in:
Родитель
89903dcb3c
Коммит
3144bfa507
|
@ -266,5 +266,6 @@ MAX_BTF_TRACING_TYPE,
|
||||||
|
|
||||||
extern u32 btf_tracing_ids[];
|
extern u32 btf_tracing_ids[];
|
||||||
extern u32 bpf_cgroup_btf_id[];
|
extern u32 bpf_cgroup_btf_id[];
|
||||||
|
extern u32 bpf_local_storage_map_btf_id[];
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -211,7 +211,6 @@ BPF_CALL_2(bpf_cgrp_storage_delete, struct bpf_map *, map, struct cgroup *, cgro
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
BTF_ID_LIST_SINGLE(cgroup_storage_map_btf_ids, struct, bpf_local_storage_map)
|
|
||||||
const struct bpf_map_ops cgrp_storage_map_ops = {
|
const struct bpf_map_ops cgrp_storage_map_ops = {
|
||||||
.map_meta_equal = bpf_map_meta_equal,
|
.map_meta_equal = bpf_map_meta_equal,
|
||||||
.map_alloc_check = bpf_local_storage_map_alloc_check,
|
.map_alloc_check = bpf_local_storage_map_alloc_check,
|
||||||
|
@ -222,7 +221,7 @@ const struct bpf_map_ops cgrp_storage_map_ops = {
|
||||||
.map_update_elem = bpf_cgrp_storage_update_elem,
|
.map_update_elem = bpf_cgrp_storage_update_elem,
|
||||||
.map_delete_elem = bpf_cgrp_storage_delete_elem,
|
.map_delete_elem = bpf_cgrp_storage_delete_elem,
|
||||||
.map_check_btf = bpf_local_storage_map_check_btf,
|
.map_check_btf = bpf_local_storage_map_check_btf,
|
||||||
.map_btf_id = &cgroup_storage_map_btf_ids[0],
|
.map_btf_id = &bpf_local_storage_map_btf_id[0],
|
||||||
.map_owner_storage_ptr = cgroup_storage_ptr,
|
.map_owner_storage_ptr = cgroup_storage_ptr,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -213,8 +213,6 @@ static void inode_storage_map_free(struct bpf_map *map)
|
||||||
bpf_local_storage_map_free(map, &inode_cache, NULL);
|
bpf_local_storage_map_free(map, &inode_cache, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
BTF_ID_LIST_SINGLE(inode_storage_map_btf_ids, struct,
|
|
||||||
bpf_local_storage_map)
|
|
||||||
const struct bpf_map_ops inode_storage_map_ops = {
|
const struct bpf_map_ops inode_storage_map_ops = {
|
||||||
.map_meta_equal = bpf_map_meta_equal,
|
.map_meta_equal = bpf_map_meta_equal,
|
||||||
.map_alloc_check = bpf_local_storage_map_alloc_check,
|
.map_alloc_check = bpf_local_storage_map_alloc_check,
|
||||||
|
@ -225,7 +223,7 @@ const struct bpf_map_ops inode_storage_map_ops = {
|
||||||
.map_update_elem = bpf_fd_inode_storage_update_elem,
|
.map_update_elem = bpf_fd_inode_storage_update_elem,
|
||||||
.map_delete_elem = bpf_fd_inode_storage_delete_elem,
|
.map_delete_elem = bpf_fd_inode_storage_delete_elem,
|
||||||
.map_check_btf = bpf_local_storage_map_check_btf,
|
.map_check_btf = bpf_local_storage_map_check_btf,
|
||||||
.map_btf_id = &inode_storage_map_btf_ids[0],
|
.map_btf_id = &bpf_local_storage_map_btf_id[0],
|
||||||
.map_owner_storage_ptr = inode_storage_ptr,
|
.map_owner_storage_ptr = inode_storage_ptr,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -324,7 +324,7 @@ static void task_storage_map_free(struct bpf_map *map)
|
||||||
bpf_local_storage_map_free(map, &task_cache, &bpf_task_storage_busy);
|
bpf_local_storage_map_free(map, &task_cache, &bpf_task_storage_busy);
|
||||||
}
|
}
|
||||||
|
|
||||||
BTF_ID_LIST_SINGLE(task_storage_map_btf_ids, struct, bpf_local_storage_map)
|
BTF_ID_LIST_GLOBAL_SINGLE(bpf_local_storage_map_btf_id, struct, bpf_local_storage_map)
|
||||||
const struct bpf_map_ops task_storage_map_ops = {
|
const struct bpf_map_ops task_storage_map_ops = {
|
||||||
.map_meta_equal = bpf_map_meta_equal,
|
.map_meta_equal = bpf_map_meta_equal,
|
||||||
.map_alloc_check = bpf_local_storage_map_alloc_check,
|
.map_alloc_check = bpf_local_storage_map_alloc_check,
|
||||||
|
@ -335,7 +335,7 @@ const struct bpf_map_ops task_storage_map_ops = {
|
||||||
.map_update_elem = bpf_pid_task_storage_update_elem,
|
.map_update_elem = bpf_pid_task_storage_update_elem,
|
||||||
.map_delete_elem = bpf_pid_task_storage_delete_elem,
|
.map_delete_elem = bpf_pid_task_storage_delete_elem,
|
||||||
.map_check_btf = bpf_local_storage_map_check_btf,
|
.map_check_btf = bpf_local_storage_map_check_btf,
|
||||||
.map_btf_id = &task_storage_map_btf_ids[0],
|
.map_btf_id = &bpf_local_storage_map_btf_id[0],
|
||||||
.map_owner_storage_ptr = task_storage_ptr,
|
.map_owner_storage_ptr = task_storage_ptr,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -310,7 +310,6 @@ bpf_sk_storage_ptr(void *owner)
|
||||||
return &sk->sk_bpf_storage;
|
return &sk->sk_bpf_storage;
|
||||||
}
|
}
|
||||||
|
|
||||||
BTF_ID_LIST_SINGLE(sk_storage_map_btf_ids, struct, bpf_local_storage_map)
|
|
||||||
const struct bpf_map_ops sk_storage_map_ops = {
|
const struct bpf_map_ops sk_storage_map_ops = {
|
||||||
.map_meta_equal = bpf_map_meta_equal,
|
.map_meta_equal = bpf_map_meta_equal,
|
||||||
.map_alloc_check = bpf_local_storage_map_alloc_check,
|
.map_alloc_check = bpf_local_storage_map_alloc_check,
|
||||||
|
@ -321,7 +320,7 @@ const struct bpf_map_ops sk_storage_map_ops = {
|
||||||
.map_update_elem = bpf_fd_sk_storage_update_elem,
|
.map_update_elem = bpf_fd_sk_storage_update_elem,
|
||||||
.map_delete_elem = bpf_fd_sk_storage_delete_elem,
|
.map_delete_elem = bpf_fd_sk_storage_delete_elem,
|
||||||
.map_check_btf = bpf_local_storage_map_check_btf,
|
.map_check_btf = bpf_local_storage_map_check_btf,
|
||||||
.map_btf_id = &sk_storage_map_btf_ids[0],
|
.map_btf_id = &bpf_local_storage_map_btf_id[0],
|
||||||
.map_local_storage_charge = bpf_sk_storage_charge,
|
.map_local_storage_charge = bpf_sk_storage_charge,
|
||||||
.map_local_storage_uncharge = bpf_sk_storage_uncharge,
|
.map_local_storage_uncharge = bpf_sk_storage_uncharge,
|
||||||
.map_owner_storage_ptr = bpf_sk_storage_ptr,
|
.map_owner_storage_ptr = bpf_sk_storage_ptr,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче