On Tue, Sep 7, 2021 at 3:37 PM Martin KaFai Lau <kafai@xxxxxx> wrote: > > On Thu, Sep 02, 2021 at 06:37:13AM +0000, jiasheng wrote: > > We have found that in the complied files env_stack_push() > > appear more than 10 times, and under at least 90% circumstances > > that env_type_is_resolved() and env_stack_push() appear in pairs. > > For example, they appear together in the btf_modifier_resolve() > > of the file complie from 'kernel/bpf/btf.c'. > > But we have found that in the btf_resolve(), there is only > > env_stack_push() instead of the pair. > > Therefore, we consider that the env_type_is_resolved() > > might be forgotten. > It does not justify a change like this just because > one of its usage looks different and then concluded that > it _might_ be forgotten. > > Does it have a bug or not? If there is, please > provide an explanation on how to reproduce it first. > Both places that call btf_resolve() check that env_type_is_resolved() first, so there is no issue here. > > > > Signed-off-by: jiasheng <jiasheng@xxxxxxxxxxx> > > --- > > kernel/bpf/btf.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c > > index f982a9f0..454c249 100644 > > --- a/kernel/bpf/btf.c > > +++ b/kernel/bpf/btf.c > > @@ -4002,7 +4002,8 @@ static int btf_resolve(struct btf_verifier_env *env, > > int err = 0; > > > > env->resolve_mode = RESOLVE_TBD; > > - env_stack_push(env, t, type_id); > > + if (env_type_is_resolved(env, type_id)) > > + env_stack_push(env, t, type_id); > > while (!err && (v = env_stack_peak(env))) { > > env->log_type_id = v->type_id; > > err = btf_type_ops(v->t)->resolve(env, v); > > -- > > 2.7.4 > >