• Martin KaFai Lau's avatar
    bpf: Use bpf_mem_cache_alloc/free for bpf_local_storage · 6ae9d5e9
    Martin KaFai Lau authored
    This patch uses bpf_mem_cache_alloc/free for allocating and freeing
    bpf_local_storage for task and cgroup storage.
    
    The changes are similar to the previous patch. A few things that
    worth to mention for bpf_local_storage:
    
    The local_storage is freed when the last selem is deleted.
    Before deleting a selem from local_storage, it needs to retrieve the
    local_storage->smap because the bpf_selem_unlink_storage_nolock()
    may have set it to NULL. Note that local_storage->smap may have
    already been NULL when the selem created this local_storage has
    been removed. In this case, call_rcu will be used to free the
    local_storage.
    Also, the bpf_ma (true or false) value is needed before calling
    bpf_local_storage_free(). The bpf_ma can either be obtained from
    the local_storage->smap (if available) or any of its selem's smap.
    A new helper check_storage_bpf_ma() is added to obtain
    bpf_ma for a deleting bpf_local_storage.
    
    When bpf_local_storage_alloc getting a reused memory, all
    fields are either in the correct values or will be initialized.
    'cache[]' must already be all NULLs. 'list' must be empty.
    Others will be initialized.
    
    Cc: Namhyung Kim <namhyung@kernel.org>
    Signed-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
    Link: https://lore.kernel.org/r/20230322215246.1675516-4-martin.lau@linux.devSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    6ae9d5e9
bpf_local_storage.c 26.7 KB