}
 
 /*
- * mas_parent_enum() - Return the maple_type of the parent from the stored
+ * mas_parent_type() - Return the maple_type of the parent from the stored
  * parent type.
  * @mas: The maple state
- * @node: The maple_enode to extract the parent's enum
+ * @enode: The maple_enode to extract the parent's enum
  * Return: The node->parent maple_type
  */
 static inline
-enum maple_type mte_parent_enum(struct maple_enode *p_enode,
-                               struct maple_tree *mt)
+enum maple_type mas_parent_type(struct ma_state *mas, struct maple_enode *enode)
 {
        unsigned long p_type;
 
-       p_type = (unsigned long)p_enode;
-       if (p_type & MAPLE_PARENT_ROOT)
-               return 0; /* Validated in the caller. */
+       p_type = (unsigned long)mte_to_node(enode)->parent;
+       if (WARN_ON(p_type & MAPLE_PARENT_ROOT))
+               return 0;
 
        p_type &= MAPLE_NODE_MASK;
-       p_type = p_type & ~(MAPLE_PARENT_ROOT | mte_parent_slot_mask(p_type));
-
+       p_type &= ~mte_parent_slot_mask(p_type);
        switch (p_type) {
        case MAPLE_PARENT_RANGE64: /* or MAPLE_PARENT_ARANGE64 */
-               if (mt_is_alloc(mt))
+               if (mt_is_alloc(mas->tree))
                        return maple_arange_64;
                return maple_range_64;
        }
        return 0;
 }
 
-static inline
-enum maple_type mas_parent_enum(struct ma_state *mas, struct maple_enode *enode)
-{
-       return mte_parent_enum(ma_enode_ptr(mte_to_node(enode)->parent), mas->tree);
-}
-
 /*
  * mte_set_parent() - Set the parent node and encode the slot
  * @enode: The encoded maple node.
        p_node = mte_parent(mas->node);
        if (unlikely(a_node == p_node))
                return 1;
-       a_type = mas_parent_enum(mas, mas->node);
+       a_type = mas_parent_type(mas, mas->node);
        offset = mte_parent_slot(mas->node);
        a_enode = mt_mk_node(p_node, a_type);
 
        max = ULONG_MAX;
        do {
                p_enode = a_enode;
-               a_type = mas_parent_enum(mas, p_enode);
+               a_type = mas_parent_type(mas, p_enode);
                a_node = mte_parent(p_enode);
                a_slot = mte_parent_slot(p_enode);
                a_enode = mt_mk_node(a_node, a_type);
        enum maple_type pmt;
 
        pnode = mte_parent(mas->node);
-       pmt = mas_parent_enum(mas, mas->node);
+       pmt = mas_parent_type(mas, mas->node);
        penode = mt_mk_node(pnode, pmt);
        pgaps = ma_gaps(pnode, pmt);
 
 
        /* Go to the parent node. */
        pnode = mte_parent(penode);
-       pmt = mas_parent_enum(mas, penode);
+       pmt = mas_parent_type(mas, penode);
        pgaps = ma_gaps(pnode, pmt);
        offset = mte_parent_slot(penode);
        penode = mt_mk_node(pnode, pmt);
 
        pslot = mte_parent_slot(mas->node);
        p_gap = ma_gaps(mte_parent(mas->node),
-                       mas_parent_enum(mas, mas->node))[pslot];
+                       mas_parent_type(mas, mas->node))[pslot];
 
        if (p_gap != max_gap)
                mas_parent_gap(mas, pslot, max_gap);
        } else {
                offset = mte_parent_slot(mas->node);
                slots = ma_slots(mte_parent(mas->node),
-                                mas_parent_enum(mas, mas->node));
+                                mas_parent_type(mas, mas->node));
                old_enode = mas_slot_locked(mas, slots, offset);
        }
 
        l_mas.max = l_pivs[split];
        mas->min = l_mas.max + 1;
        eparent = mt_mk_node(mte_parent(l_mas.node),
-                            mas_parent_enum(&l_mas, l_mas.node));
+                            mas_parent_type(&l_mas, l_mas.node));
        tmp += end;
        if (!in_rcu) {
                unsigned char max_p = mt_pivots[mt];
 
        /* replace parent. */
        offset = mte_parent_slot(mas->node);
-       mt = mas_parent_enum(&l_mas, l_mas.node);
+       mt = mas_parent_type(&l_mas, l_mas.node);
        parent = mas_pop_node(mas);
        slots = ma_slots(parent, mt);
        pivs = ma_pivots(parent, mt);
        p_slot = mte_parent_slot(mas->node);
        p_mn = mte_parent(mte);
        MT_BUG_ON(mas->tree, max_gap > mas->max);
-       if (ma_gaps(p_mn, mas_parent_enum(mas, mte))[p_slot] != max_gap) {
+       if (ma_gaps(p_mn, mas_parent_type(mas, mte))[p_slot] != max_gap) {
                pr_err("gap %p[%u] != %lu\n", p_mn, p_slot, max_gap);
                mt_dump(mas->tree);
        }
 
        MT_BUG_ON(mas->tree,
-                 ma_gaps(p_mn, mas_parent_enum(mas, mte))[p_slot] != max_gap);
+                 ma_gaps(p_mn, mas_parent_type(mas, mte))[p_slot] != max_gap);
 }
 
 static void mas_validate_parent_slot(struct ma_state *mas)
 {
        struct maple_node *parent;
        struct maple_enode *node;
-       enum maple_type p_type = mas_parent_enum(mas, mas->node);
-       unsigned char p_slot = mte_parent_slot(mas->node);
+       enum maple_type p_type;
+       unsigned char p_slot;
        void __rcu **slots;
        int i;
 
        if (mte_is_root(mas->node))
                return;
 
+       p_slot = mte_parent_slot(mas->node);
+       p_type = mas_parent_type(mas, mas->node);
        parent = mte_parent(mas->node);
        slots = ma_slots(parent, p_type);
        MT_BUG_ON(mas->tree, mas_mn(mas) == parent);