lkml.org 
[lkml]   [2023]   [Mar]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/8] maple_tree: detect dead nodes in mas_start()
    Date
    From: "Liam R. Howlett" <Liam.Howlett@Oracle.com>

    When initially starting a search, the root node may already be in the
    process of being replaced in RCU mode. Detect and restart the walk if
    this is the case. This is necessary for RCU mode of the maple tree.

    Link: https://lkml.kernel.org/r/20230227173632.3292573-3-surenb@google.com
    Cc: <Stable@vger.kernel.org>
    Fixes: 54a611b60590 ("Maple Tree: add new data structure")
    Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
    ---
    lib/maple_tree.c | 4 ++++
    1 file changed, 4 insertions(+)

    diff --git a/lib/maple_tree.c b/lib/maple_tree.c
    index cc356b8369ad..089cd76ec379 100644
    --- a/lib/maple_tree.c
    +++ b/lib/maple_tree.c
    @@ -1360,12 +1360,16 @@ static inline struct maple_enode *mas_start(struct ma_state *mas)
    mas->max = ULONG_MAX;
    mas->depth = 0;

    +retry:
    root = mas_root(mas);
    /* Tree with nodes */
    if (likely(xa_is_node(root))) {
    mas->depth = 1;
    mas->node = mte_safe_root(root);
    mas->offset = 0;
    + if (mte_dead_node(mas->node))
    + goto retry;
    +
    return NULL;
    }

    --
    2.39.2
    \
     
     \ /
      Last update: 2023-03-27 21:09    [W:7.836 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site