Re: [PATCH bpf-next v3] libbpf: add "bool skipped" to struct bpf_map

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Dec 10, 2021 at 1:40 AM Shuyi Cheng
<chengshuyi@xxxxxxxxxxxxxxxxx> wrote:
>
> Fix error: "failed to pin map: Bad file descriptor, path:
> /sys/fs/bpf/_rodata_str1_1."
>
> In the old kernel, the global data map will not be created, see [0]. So
> we should skip the pinning of the global data map to avoid
> bpf_object__pin_maps returning error. Therefore, when the map is not
> created, we mark “map->skipped" as true and then check during relocation
> and during pinning.
>
> Signed-off-by: Shuyi Cheng <chengshuyi@xxxxxxxxxxxxxxxxx>
> ---
> v2:
> https://lore.kernel.org/bpf/CAEf4Bzbxf4kEtCEWBSonomEp7ZiKBD50k-U941i=okKfgKb6FQ@xxxxxxxxxxxxxx/T/#mb884d33b1b5b8e5dfb5a362af0d3c025510b5a4c
> v2->v3:
> -- adjust the "bool skipped" position
>
> v1:
> https://lore.kernel.org/bpf/CAEf4BzbtQGnGZTLbTdy1GHK54f5S7YNFQak7BuEfaqGEwqNNJA@xxxxxxxxxxxxxx/T/#m80ec7f8bc69dbcf4a5945e2aa6f16145901afc40
> v1->v2:
> -- add "bool skipped" to struct bpf_map.
> -- replace "bpf_map__is_internal(map) && !kernel_supports(obj,
> FEAT_GLOBAL_DATA))" with map->skipped
>

Ok, I don't know what exactly is happening, but your patch
really-really confuses Patchworks. If you try to download it from
Patchworks, you'll get bpf_object__pin_maps part of the patch put
somewhere here and completely confusing everything. Try not to use
"--" as a list marker, you can see above it's actually used to
demarcate where the commit message ends and patch starts, so that
might be one of the reasons. Adding space in front of bullet points is
also not a bad idea.


Either way, I applied it manually locally and pushed to bpf-next.
Thanks. I'll cherry-pick this one and btf__dedup_deprecated fix from
yesterday into github libbpf and will cut a bugfix v0.6.1 release
shortly.


>   tools/lib/bpf/libbpf.c | 11 ++++++++---
>   1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
> index 18d95c6a89fe..d027e1d620fc 100644
> --- a/tools/lib/bpf/libbpf.c
> +++ b/tools/lib/bpf/libbpf.c
> @@ -431,6 +431,7 @@ struct bpf_map {
>         char *pin_path;
>         bool pinned;
>         bool reused;
> +       bool skipped;
>         __u64 map_extra;
>   };
>
> @@ -5087,8 +5088,10 @@ bpf_object__create_maps(struct bpf_object *obj)
>                  * kernels.
>                  */
>                 if (bpf_map__is_internal(map) &&
> -                   !kernel_supports(obj, FEAT_GLOBAL_DATA))
> +                   !kernel_supports(obj, FEAT_GLOBAL_DATA)) {
> +                       map->skipped = true;
>                         continue;
> +               }
>
>                 retried = false;
>   retry:
> @@ -5717,8 +5720,7 @@ bpf_object__relocate_data(struct bpf_object *obj,
> struct bpf_program *prog)
>                         } else {
>                                 const struct bpf_map *map = &obj->maps[relo->map_idx];
>
> -                               if (bpf_map__is_internal(map) &&
> -                                   !kernel_supports(obj, FEAT_GLOBAL_DATA)) {
> +                               if (map->skipped) {
>                                         pr_warn("prog '%s': relo #%d: kernel doesn't support global data\n",
>                                                 prog->name, i);
>                                         return -ENOTSUP;
> @@ -7926,6 +7928,9 @@ int bpf_object__pin_maps(struct bpf_object *obj,
> const char *path)
>                 char *pin_path = NULL;
>                 char buf[PATH_MAX];
>
> +               if (map->skipped)
> +                       continue;
> +
>                 if (path) {
>                         int len;
>
> --
> 2.19.1.6.gb485710b




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux