Message ID | 20230425140955.3834476-16-Liam.Howlett@oracle.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Maple tree mas_{next,prev}_range() and cleanup | expand |
在 2023/4/25 22:09, Liam R. Howlett 写道: > Rename mte_pivots() to mas_pivots() and pass through the ma_state to set > the error code to -EIO when the offset is out of range for the node > type. Change the WARN_ON() to MAS_WARN_ON() to log the maple state. > > Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com> Reviewed-by: Peng Zhang <zhangpeng.00@bytedance.com> > --- > lib/maple_tree.c | 25 ++++++++++++++----------- > 1 file changed, 14 insertions(+), 11 deletions(-) > > diff --git a/lib/maple_tree.c b/lib/maple_tree.c > index 41873d935cfa3..89e30462f8b62 100644 > --- a/lib/maple_tree.c > +++ b/lib/maple_tree.c > @@ -663,22 +663,22 @@ static inline unsigned long *ma_gaps(struct maple_node *node, > } > > /* > - * mte_pivot() - Get the pivot at @piv of the maple encoded node. > - * @mn: The maple encoded node. > + * mas_pivot() - Get the pivot at @piv of the maple encoded node. > + * @mas: The maple state. > * @piv: The pivot. > * > * Return: the pivot at @piv of @mn. > */ > -static inline unsigned long mte_pivot(const struct maple_enode *mn, > - unsigned char piv) > +static inline unsigned long mas_pivot(struct ma_state *mas, unsigned char piv) > { > - struct maple_node *node = mte_to_node(mn); > - enum maple_type type = mte_node_type(mn); > + struct maple_node *node = mas_mn(mas); > + enum maple_type type = mte_node_type(mas->node); > > - if (piv >= mt_pivots[type]) { > - WARN_ON(1); > + if (MAS_WARN_ON(mas, piv >= mt_pivots[type])) { > + mas_set_err(mas, -EIO); > return 0; > } > + > switch (type) { > case maple_arange_64: > return node->ma64.pivot[piv]; > @@ -5400,8 +5400,8 @@ static inline int mas_alloc(struct ma_state *mas, void *entry, > return xa_err(mas->node); > > if (!mas->index) > - return mte_pivot(mas->node, 0); > - return mte_pivot(mas->node, 1); > + return mas_pivot(mas, 0); > + return mas_pivot(mas, 1); > } > > /* Must be walking a tree. */ > @@ -5418,7 +5418,10 @@ static inline int mas_alloc(struct ma_state *mas, void *entry, > */ > min = mas->min; > if (mas->offset) > - min = mte_pivot(mas->node, mas->offset - 1) + 1; > + min = mas_pivot(mas, mas->offset - 1) + 1; > + > + if (mas_is_err(mas)) > + return xa_err(mas->node); > > if (mas->index < min) > mas->index = min;
diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 41873d935cfa3..89e30462f8b62 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -663,22 +663,22 @@ static inline unsigned long *ma_gaps(struct maple_node *node, } /* - * mte_pivot() - Get the pivot at @piv of the maple encoded node. - * @mn: The maple encoded node. + * mas_pivot() - Get the pivot at @piv of the maple encoded node. + * @mas: The maple state. * @piv: The pivot. * * Return: the pivot at @piv of @mn. */ -static inline unsigned long mte_pivot(const struct maple_enode *mn, - unsigned char piv) +static inline unsigned long mas_pivot(struct ma_state *mas, unsigned char piv) { - struct maple_node *node = mte_to_node(mn); - enum maple_type type = mte_node_type(mn); + struct maple_node *node = mas_mn(mas); + enum maple_type type = mte_node_type(mas->node); - if (piv >= mt_pivots[type]) { - WARN_ON(1); + if (MAS_WARN_ON(mas, piv >= mt_pivots[type])) { + mas_set_err(mas, -EIO); return 0; } + switch (type) { case maple_arange_64: return node->ma64.pivot[piv]; @@ -5400,8 +5400,8 @@ static inline int mas_alloc(struct ma_state *mas, void *entry, return xa_err(mas->node); if (!mas->index) - return mte_pivot(mas->node, 0); - return mte_pivot(mas->node, 1); + return mas_pivot(mas, 0); + return mas_pivot(mas, 1); } /* Must be walking a tree. */ @@ -5418,7 +5418,10 @@ static inline int mas_alloc(struct ma_state *mas, void *entry, */ min = mas->min; if (mas->offset) - min = mte_pivot(mas->node, mas->offset - 1) + 1; + min = mas_pivot(mas, mas->offset - 1) + 1; + + if (mas_is_err(mas)) + return xa_err(mas->node); if (mas->index < min) mas->index = min;
Rename mte_pivots() to mas_pivots() and pass through the ma_state to set the error code to -EIO when the offset is out of range for the node type. Change the WARN_ON() to MAS_WARN_ON() to log the maple state. Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com> --- lib/maple_tree.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-)