diff options
| author | Liam R. Howlett (Oracle) <liam@infradead.org> | 2026-06-30 15:08:31 -0400 |
|---|---|---|
| committer | Andrew Morton <akpm@linux-foundation.org> | 2026-07-22 21:11:55 -0700 |
| commit | d8ef33f48037468fa6900c5055fd6b7e1825d42d (patch) | |
| tree | 1b17566e3e68f4f808c5468698dc95ddb0572842 /lib | |
| parent | 3dd2f668433c490d0cd7533b6734d36d8f468f2d (diff) | |
| download | linux-next-d8ef33f48037468fa6900c5055fd6b7e1825d42d.tar.gz linux-next-d8ef33f48037468fa6900c5055fd6b7e1825d42d.zip | |
maple_tree: clarify comments on mas_nomem()
When an allocation completely fails, the return is false. If the
allocation succeeds or partially succeeds, return true to indicate a retry
of the operation. Note that since the lock may have been dropped, the
operation is retried from the start - including potentially allocating
more memory.
Link: https://lore.kernel.org/20260630190843.3563858-8-liam@infradead.org
Signed-off-by: Liam R. Howlett (Oracle) <liam@infradead.org>
Cc: Boqun Feng <boqun.feng@gmail.com>
Cc: Chris Mason <clm@meta.com>
Cc: Chuck Lever <cel@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jason Gunthorpe <jgg@ziepe.ca>
Cc: Joe Perches <joe@perches.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@surriel.com>
Cc: Waiman Long <longman@redhat.com>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/maple_tree.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 97849db132e7..3886b856d6e3 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -5676,10 +5676,11 @@ EXPORT_SYMBOL_GPL(mas_erase); /** * mas_nomem() - Check if there was an error allocating and do the allocation - * if necessary If there are allocations, then free them. + * if necessary. + * * @mas: The maple state * @gfp: The GFP_FLAGS to use for allocations - * Return: true on allocation, false otherwise. + * Return: False on no memory. True otherwise (partial success as well) */ bool mas_nomem(struct ma_state *mas, gfp_t gfp) __must_hold(mas->tree->ma_lock) @@ -5695,6 +5696,10 @@ bool mas_nomem(struct ma_state *mas, gfp_t gfp) mas_alloc_nodes(mas, gfp); } + /* + * Return false on zero forward progress. Partial allocations are kept + * so the retry path will attempt to get the rest. + */ if (!mas->sheaf && !mas->alloc) return false; |
