mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2024-12-29 09:13:38 +00:00
maple_tree: convert mas_insert() to preallocate nodes
By setting the store type in mas_insert(), we no longer need to use mas_wr_modify() to determine the correct store function to use. Instead, set the store type and call mas_wr_store_entry(). Also, pass in the requested gfp flags to mas_insert() so they can be passed to the call to mas_wr_preallocate(). Link: https://lkml.kernel.org/r/20240814161944.55347-11-sidhartha.kumar@oracle.com Reviewed-by: Liam R. Howlett <Liam.Howlett@oracle.com> Signed-off-by: Sidhartha Kumar <sidhartha.kumar@oracle.com> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Suren Baghdasaryan <surenb@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
580fcbd67c
commit
1fd7c4f322
@ -4457,26 +4457,24 @@ static inline void *mas_insert(struct ma_state *mas, void *entry)
|
||||
if (wr_mas.content)
|
||||
goto exists;
|
||||
|
||||
if (mas_is_none(mas) || mas_is_ptr(mas)) {
|
||||
mas_store_root(mas, entry);
|
||||
mas_wr_preallocate(&wr_mas, entry);
|
||||
if (mas_is_err(mas))
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* spanning writes always overwrite something */
|
||||
if (!mas_wr_walk(&wr_mas))
|
||||
if (mas->store_type == wr_spanning_store)
|
||||
goto exists;
|
||||
|
||||
/* At this point, we are at the leaf node that needs to be altered. */
|
||||
wr_mas.offset_end = mas->offset;
|
||||
wr_mas.end_piv = wr_mas.r_max;
|
||||
if (mas->store_type != wr_new_root && mas->store_type != wr_store_root) {
|
||||
wr_mas.offset_end = mas->offset;
|
||||
wr_mas.end_piv = wr_mas.r_max;
|
||||
|
||||
if (wr_mas.content || (mas->last > wr_mas.r_max))
|
||||
goto exists;
|
||||
if (wr_mas.content || (mas->last > wr_mas.r_max))
|
||||
goto exists;
|
||||
}
|
||||
|
||||
if (!entry)
|
||||
return NULL;
|
||||
|
||||
mas_wr_modify(&wr_mas);
|
||||
mas_wr_store_entry(&wr_mas);
|
||||
return wr_mas.content;
|
||||
|
||||
exists:
|
||||
|
Loading…
Reference in New Issue
Block a user