[DTrace-devel] [PATCH] Implement dt_bpf_map_lookup_fd()

Kris Van Hees kris.van.hees at oracle.com
Wed Aug 31 21:37:38 UTC 2022


On Wed, Aug 31, 2022 at 05:29:16PM -0400, Eugene Loh via DTrace-devel wrote:
> Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
> but consider...
> 
> On 8/31/22 16:28, Kris Van Hees via DTrace-devel wrote:
> > Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> > ---
> >   libdtrace/dt_bpf.c | 20 +++++++++++++++++---
> >   libdtrace/dt_bpf.h |  1 +
> >   2 files changed, 18 insertions(+), 3 deletions(-)
> > 
> > diff --git a/libdtrace/dt_bpf.c b/libdtrace/dt_bpf.c
> > index 81b6e6cb..504ddcb4 100644
> > --- a/libdtrace/dt_bpf.c
> > +++ b/libdtrace/dt_bpf.c
> > @@ -244,18 +244,32 @@ dt_bpf_map_update(int fd, const void *key, const void *val)
> >   }
> >   /*
> > - * Retrieve the value in a map-of-maps, i.e. map[okey][ikey].
> > + * Retrieve the fd for a map-in-map, i.e. map[okey] which is the fd of a map.
> > + *
> > + * Note: the caller is responsible for closing the fd.
> >    */
> >   int
> > -dt_bpf_map_lookup_inner(int fd, const void *okey, const void *ikey, void *val)
> > +dt_bpf_map_lookup_fd(int fd, const void *okey)
> >   {
> >   	uint32_t	id;
> > -	int		rc;
> >   	if (dt_bpf_map_lookup(fd, okey, &id) < 0)
> >   		return -1;
> >   	fd = dt_bpf_map_get_fd_by_id(id);
> > +
> > +	return fd;
> 
> Instead of reusing fd, how about just
>         return dt_bpf_map_get_fd_by_id(id);

Good point.  Adjusted.  Thanks.

> 
> > +}
> > +
> > +/*
> > + * Retrieve the value in a map-of-maps, i.e. map[okey][ikey].
> > + */
> > +int
> > +dt_bpf_map_lookup_inner(int fd, const void *okey, const void *ikey, void *val)
> > +{
> > +	int		rc;
> > +
> > +	fd = dt_bpf_map_lookup_fd(fd, okey);
> >   	if (fd < 0)
> >   		return -1;
> > diff --git a/libdtrace/dt_bpf.h b/libdtrace/dt_bpf.h
> > index 17761116..ab3862aa 100644
> > --- a/libdtrace/dt_bpf.h
> > +++ b/libdtrace/dt_bpf.h
> > @@ -51,6 +51,7 @@ extern int dt_bpf_map_next_key(int fd, const void *key, void *nxt);
> >   extern int dt_bpf_map_update(int fd, const void *key, const void *val);
> >   extern int dt_bpf_map_delete(int fd, const void *key);
> >   extern int dt_bpf_map_get_fd_by_id(uint32_t id);
> > +extern int dt_bpf_map_lookup_fd(int fd, const void *okey);
> >   extern int dt_bpf_map_lookup_inner(int fd, const void *okey, const void *ikey,
> >   				   void *val);
> >   extern int dt_bpf_map_update_inner(int fd, const void *okey, const void *ikey,
> 
> _______________________________________________
> DTrace-devel mailing list
> DTrace-devel at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/dtrace-devel



More information about the DTrace-devel mailing list