On Fri, Sep 11, 2020 at 10:03 AM Borna Cafuk <borna.cafuk@xxxxxxxxxx> wrote: > > Hello everyone, > > As far as I can see, `map_lookup_and_delete_elem` is implemented only for > `BPF_MAP_TYPE_QUEUE` and `BPF_MAP_TYPE_STACK` [0]. It might be useful to be > able to do this operation on other kinds of maps, e.g. `BPF_MAP_TYPE_HASH`. > > If I'm not mistaken, it would have benefits over `bpf_map_lookup_elem` followed > by `bpf_map_delete_elem` in regards to avoiding race conditions. Yes, for a case when you know the key. But for the more general iteration cases, in which you go over all elements, read, and later remove element, not so much, because removing element would essentially break iteration. But I do agree, for some cases it should be quite useful. > > Is there a reason this functionality wasn't implemented? Probably no one had a specific use case for this. > Is it planned for any time soon? > No, as far as I'm aware. > I'm looking forward to your input. Feel free to implement this and send a patch. It doesn't seem to impose any extra limitations on use of BPF_MAP_TYPE_HASH, so I don't see why this can't be done. > > Best regards, > Borna Cafuk > > [0] https://elixir.bootlin.com/linux/v5.9-rc4/source/kernel/bpf/syscall.c#L1501