• Matthew Wilcox's avatar
    xarray: Add XArray unconditional store operations · 58d6ea30
    Matthew Wilcox authored
    xa_store() differs from radix_tree_insert() in that it will overwrite an
    existing element in the array rather than returning an error.  This is
    the behaviour which most users want, and those that want more complex
    behaviour generally want to use the xas family of routines anyway.
    
    For memory allocation, xa_store() will first attempt to request memory
    from the slab allocator; if memory is not immediately available, it will
    drop the xa_lock and allocate memory, keeping a pointer in the xa_state.
    It does not use the per-CPU cache, although those will continue to exist
    until all radix tree users are converted to the xarray.
    
    This patch also includes xa_erase() and __xa_erase() for a streamlined
    way to store NULL.  Since there is no need to allocate memory in order
    to store a NULL in the XArray, we do not need to trouble the user with
    deciding what memory allocation flags to use.
    Signed-off-by: default avatarMatthew Wilcox <willy@infradead.org>
    58d6ea30
xarray.c 29 KB