Commit d695c30a authored by Peng Zhang's avatar Peng Zhang Committed by Andrew Morton

maple_tree: don't use MAPLE_ARANGE64_META_MAX to indicate no gap

Patch series "Improve the validation for maple tree and some cleanup", v2.


This patch (of 7):

Do not use a special offset to indicate that there is no gap.  When there
is no gap, offset can point to any valid slots because its gap is 0.

Link: https://lkml.kernel.org/r/20230711035444.526-1-zhangpeng.00@bytedance.com
Link: https://lkml.kernel.org/r/20230711035444.526-3-zhangpeng.00@bytedance.comSigned-off-by: default avatarPeng Zhang <zhangpeng.00@bytedance.com>
Reviewed-by: default avatarLiam R. Howlett <Liam.Howlett@oracle.com>
Tested-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 86aa6998
...@@ -29,14 +29,12 @@ ...@@ -29,14 +29,12 @@
#define MAPLE_NODE_SLOTS 31 /* 256 bytes including ->parent */ #define MAPLE_NODE_SLOTS 31 /* 256 bytes including ->parent */
#define MAPLE_RANGE64_SLOTS 16 /* 256 bytes */ #define MAPLE_RANGE64_SLOTS 16 /* 256 bytes */
#define MAPLE_ARANGE64_SLOTS 10 /* 240 bytes */ #define MAPLE_ARANGE64_SLOTS 10 /* 240 bytes */
#define MAPLE_ARANGE64_META_MAX 15 /* Out of range for metadata */
#define MAPLE_ALLOC_SLOTS (MAPLE_NODE_SLOTS - 1) #define MAPLE_ALLOC_SLOTS (MAPLE_NODE_SLOTS - 1)
#else #else
/* 32bit sizes */ /* 32bit sizes */
#define MAPLE_NODE_SLOTS 63 /* 256 bytes including ->parent */ #define MAPLE_NODE_SLOTS 63 /* 256 bytes including ->parent */
#define MAPLE_RANGE64_SLOTS 32 /* 256 bytes */ #define MAPLE_RANGE64_SLOTS 32 /* 256 bytes */
#define MAPLE_ARANGE64_SLOTS 21 /* 240 bytes */ #define MAPLE_ARANGE64_SLOTS 21 /* 240 bytes */
#define MAPLE_ARANGE64_META_MAX 31 /* Out of range for metadata */
#define MAPLE_ALLOC_SLOTS (MAPLE_NODE_SLOTS - 2) #define MAPLE_ALLOC_SLOTS (MAPLE_NODE_SLOTS - 2)
#endif /* defined(CONFIG_64BIT) || defined(BUILD_VDSO32_64) */ #endif /* defined(CONFIG_64BIT) || defined(BUILD_VDSO32_64) */
......
...@@ -1610,8 +1610,6 @@ ma_max_gap(struct maple_node *node, unsigned long *gaps, enum maple_type mt, ...@@ -1610,8 +1610,6 @@ ma_max_gap(struct maple_node *node, unsigned long *gaps, enum maple_type mt,
* mas_max_gap() - find the largest gap in a non-leaf node and set the slot. * mas_max_gap() - find the largest gap in a non-leaf node and set the slot.
* @mas: The maple state. * @mas: The maple state.
* *
* If the metadata gap is set to MAPLE_ARANGE64_META_MAX, there is no gap.
*
* Return: The gap value. * Return: The gap value.
*/ */
static inline unsigned long mas_max_gap(struct ma_state *mas) static inline unsigned long mas_max_gap(struct ma_state *mas)
...@@ -1628,9 +1626,6 @@ static inline unsigned long mas_max_gap(struct ma_state *mas) ...@@ -1628,9 +1626,6 @@ static inline unsigned long mas_max_gap(struct ma_state *mas)
node = mas_mn(mas); node = mas_mn(mas);
MAS_BUG_ON(mas, mt != maple_arange_64); MAS_BUG_ON(mas, mt != maple_arange_64);
offset = ma_meta_gap(node, mt); offset = ma_meta_gap(node, mt);
if (offset == MAPLE_ARANGE64_META_MAX)
return 0;
gaps = ma_gaps(node, mt); gaps = ma_gaps(node, mt);
return gaps[offset]; return gaps[offset];
} }
...@@ -1662,10 +1657,7 @@ static inline void mas_parent_gap(struct ma_state *mas, unsigned char offset, ...@@ -1662,10 +1657,7 @@ static inline void mas_parent_gap(struct ma_state *mas, unsigned char offset,
ascend: ascend:
MAS_BUG_ON(mas, pmt != maple_arange_64); MAS_BUG_ON(mas, pmt != maple_arange_64);
meta_offset = ma_meta_gap(pnode, pmt); meta_offset = ma_meta_gap(pnode, pmt);
if (meta_offset == MAPLE_ARANGE64_META_MAX) meta_gap = pgaps[meta_offset];
meta_gap = 0;
else
meta_gap = pgaps[meta_offset];
pgaps[offset] = new; pgaps[offset] = new;
...@@ -1678,7 +1670,6 @@ static inline void mas_parent_gap(struct ma_state *mas, unsigned char offset, ...@@ -1678,7 +1670,6 @@ static inline void mas_parent_gap(struct ma_state *mas, unsigned char offset,
ma_set_meta_gap(pnode, pmt, offset); ma_set_meta_gap(pnode, pmt, offset);
} else if (new < meta_gap) { } else if (new < meta_gap) {
meta_offset = 15;
new = ma_max_gap(pnode, pgaps, pmt, &meta_offset); new = ma_max_gap(pnode, pgaps, pmt, &meta_offset);
ma_set_meta_gap(pnode, pmt, meta_offset); ma_set_meta_gap(pnode, pmt, meta_offset);
} }
...@@ -2076,7 +2067,7 @@ static inline void mab_mas_cp(struct maple_big_node *b_node, ...@@ -2076,7 +2067,7 @@ static inline void mab_mas_cp(struct maple_big_node *b_node,
end = j - 1; end = j - 1;
if (likely(!ma_is_leaf(mt) && mt_is_alloc(mas->tree))) { if (likely(!ma_is_leaf(mt) && mt_is_alloc(mas->tree))) {
unsigned long max_gap = 0; unsigned long max_gap = 0;
unsigned char offset = 15; unsigned char offset = 0;
gaps = ma_gaps(node, mt); gaps = ma_gaps(node, mt);
do { do {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment