mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-15 02:05:33 +00:00
bpf: Add a __btf_get_by_fd helper
Add a new helper to get a pointer to a struct btf from a file descriptor. This helper doesn't increase a refcnt. Add a comment explaining this and pointing to a corresponding function which does take a reference. Signed-off-by: Anton Protopopov <aspsk@isovalent.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Acked-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/bpf/20241213130934.1087929-2-aspsk@isovalent.com
This commit is contained in:
parent
6a10d2d361
commit
4e885fab71
@ -2301,6 +2301,14 @@ void __bpf_obj_drop_impl(void *p, const struct btf_record *rec, bool percpu);
|
||||
struct bpf_map *bpf_map_get(u32 ufd);
|
||||
struct bpf_map *bpf_map_get_with_uref(u32 ufd);
|
||||
|
||||
/*
|
||||
* The __bpf_map_get() and __btf_get_by_fd() functions parse a file
|
||||
* descriptor and return a corresponding map or btf object.
|
||||
* Their names are double underscored to emphasize the fact that they
|
||||
* do not increase refcnt. To also increase refcnt use corresponding
|
||||
* bpf_map_get() and btf_get_by_fd() functions.
|
||||
*/
|
||||
|
||||
static inline struct bpf_map *__bpf_map_get(struct fd f)
|
||||
{
|
||||
if (fd_empty(f))
|
||||
@ -2310,6 +2318,15 @@ static inline struct bpf_map *__bpf_map_get(struct fd f)
|
||||
return fd_file(f)->private_data;
|
||||
}
|
||||
|
||||
static inline struct btf *__btf_get_by_fd(struct fd f)
|
||||
{
|
||||
if (fd_empty(f))
|
||||
return ERR_PTR(-EBADF);
|
||||
if (unlikely(fd_file(f)->f_op != &btf_fops))
|
||||
return ERR_PTR(-EINVAL);
|
||||
return fd_file(f)->private_data;
|
||||
}
|
||||
|
||||
void bpf_map_inc(struct bpf_map *map);
|
||||
void bpf_map_inc_with_uref(struct bpf_map *map);
|
||||
struct bpf_map *__bpf_map_inc_not_zero(struct bpf_map *map, bool uref);
|
||||
|
@ -7746,14 +7746,9 @@ struct btf *btf_get_by_fd(int fd)
|
||||
struct btf *btf;
|
||||
CLASS(fd, f)(fd);
|
||||
|
||||
if (fd_empty(f))
|
||||
return ERR_PTR(-EBADF);
|
||||
|
||||
if (fd_file(f)->f_op != &btf_fops)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
btf = fd_file(f)->private_data;
|
||||
refcount_inc(&btf->refcnt);
|
||||
btf = __btf_get_by_fd(f);
|
||||
if (!IS_ERR(btf))
|
||||
refcount_inc(&btf->refcnt);
|
||||
|
||||
return btf;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user