From dca17b31605531a8af5fd8194aa14341dce58523 Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Fri, 7 Dec 2018 15:57:09 -0500 Subject: [PATCH] maple_tree: Fix error in retry logic. _maple_insert cannot return MAS_START and does not need to allocate any memory ever. _maple_setup_insert is the only function that would request a restart due to no memory. _maple_setup_insert can either do this by a split or by expanding root. Signed-off-by: Liam R. Howlett --- lib/maple_tree.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index d7b605d609b9..bf751db3f160 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -585,8 +585,6 @@ static inline int _maple_insert(struct maple_state *ms, void *entry) if (ms->tree->root == NULL) { ms->tree->root = entry; return 0; - } else { - return -EEXIST; } } @@ -721,16 +719,14 @@ int mtree_insert_range(struct maple_tree *mt, unsigned long start, spin_lock(&ms.tree->lock); retry: walked = _maple_setup_insert(&ms); - if (walked == MAS_START) - goto retry; + if (walked == MAS_START) { + if (__maple_nomem(&ms, gfp)) + goto retry; + } if (walked != NULL) goto already_exists; ret = _maple_insert(&ms, entry); - if (ret == -ENOMEM) { - if (__maple_nomem(&ms, gfp)) - goto retry; - } already_exists: spin_unlock(&ms.tree->lock); -- 2.50.1