On Mon, Oct 8, 2018 at 6:06 PM Prashant Bhole <bhole_prashant...@lab.ntt.co.jp> wrote: > > The error value returned by map_lookup_elem doesn't differentiate > whether lookup was failed because of invalid key or lookup is not > supported. > > Lets add handling for -EOPNOTSUPP return value of map_lookup_elem() > method of map, with expectation from map's implementation that it > should return -EOPNOTSUPP if lookup is not supported. > > The errno for bpf syscall for BPF_MAP_LOOKUP_ELEM command will be set > to EOPNOTSUPP if map lookup is not supported. > > Signed-off-by: Prashant Bhole <bhole_prashant...@lab.ntt.co.jp> > Acked-by: Alexei Starovoitov <a...@kernel.org>
Acked-by: Song Liu <songliubrav...@fb.com> > --- > kernel/bpf/syscall.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c > index 5742df21598c..4f416234251f 100644 > --- a/kernel/bpf/syscall.c > +++ b/kernel/bpf/syscall.c > @@ -719,10 +719,15 @@ static int map_lookup_elem(union bpf_attr *attr) > } else { > rcu_read_lock(); > ptr = map->ops->map_lookup_elem(map, key); > - if (ptr) > + if (IS_ERR(ptr)) { > + err = PTR_ERR(ptr); > + } else if (!ptr) { > + err = -ENOENT; > + } else { > + err = 0; > memcpy(value, ptr, value_size); > + } > rcu_read_unlock(); > - err = ptr ? 0 : -ENOENT; > } > > if (err) > -- > 2.17.1 > >