lkml.org 
[lkml]   [2018]   [Mar]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v9 22/61] xarray: Add xas_create_range
    Date
    From: Matthew Wilcox <mawilcox@microsoft.com>

    This hopefully temporary function is useful for users who have not yet
    been converted to multi-index entries.

    Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
    ---
    include/linux/xarray.h | 2 ++
    lib/xarray.c | 22 ++++++++++++++++++++++
    2 files changed, 24 insertions(+)

    diff --git a/include/linux/xarray.h b/include/linux/xarray.h
    index c8a0ddc1b3df..387be18d05ba 100644
    --- a/include/linux/xarray.h
    +++ b/include/linux/xarray.h
    @@ -744,6 +744,8 @@ void xas_init_tags(const struct xa_state *);
    bool xas_nomem(struct xa_state *, gfp_t);
    void xas_pause(struct xa_state *);

    +void xas_create_range(struct xa_state *, unsigned long max);
    +
    /**
    * xas_reload() - Refetch an entry from the xarray.
    * @xas: XArray operation state.
    diff --git a/lib/xarray.c b/lib/xarray.c
    index 7cf195b6e740..1d94ecc2dca3 100644
    --- a/lib/xarray.c
    +++ b/lib/xarray.c
    @@ -612,6 +612,28 @@ void *xas_create(struct xa_state *xas)
    }
    EXPORT_SYMBOL_GPL(xas_create);

    +/**
    + * xas_create_range() - Ensure that stores to this range will succeed
    + * @xas: XArray operation state.
    + * @max: The highest index to create a slot for.
    + *
    + * Creates all of the slots in the range between the current position of
    + * @xas and @max. This is for the benefit of users who have not yet been
    + * converted to multi-index entries.
    + *
    + * The implementation is naive.
    + */
    +void xas_create_range(struct xa_state *xas, unsigned long max)
    +{
    + XA_STATE(tmp, xas->xa, xas->xa_index);
    +
    + do {
    + xas_create(&tmp);
    + xas_set(&tmp, tmp.xa_index + XA_CHUNK_SIZE);
    + } while (tmp.xa_index < max);
    +}
    +EXPORT_SYMBOL_GPL(xas_create_range);
    +
    static void store_siblings(struct xa_state *xas, void *entry, void *curr,
    int *countp, int *valuesp)
    {
    --
    2.16.1
    \
     
     \ /
      Last update: 2018-03-13 14:43    [W:2.491 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site