summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Law <objecting@objecting.org>2026-03-20 17:36:45 +0300
committerAndrew Morton <akpm@linux-foundation.org>2026-04-05 23:53:34 +0300
commitcc4555fc6d8f8585ae05f3e117cfdd60e4673281 (patch)
tree22d05faca86461e211a4cff19a8b1a435db5937a
parenta6a8c087dce00eac0c6d03e560b0fa3d529afa5f (diff)
downloadlinux-cc4555fc6d8f8585ae05f3e117cfdd60e4673281.tar.xz
mm/damon/core: document damos_commit_dests() failure semantics
Add a kernel-doc-like comment to damos_commit_dests() documenting its allocation failure contract: on -ENOMEM, the destination structure is left in a partially torn-down state that is safe to deallocate via damon_destroy_scheme(), but must not be reused for further commits. This was unclear from the code alone and led to a separate patch [1] attempting to reset nr_dests on failure. Make the intended usage explicit so future readers do not repeat the confusion. Link: https://lkml.kernel.org/r/20260320143648.91673-1-sj@kernel.org Link: https://lore.kernel.org/20260318214939.36100-1-objecting@objecting.org [1] Signed-off-by: Josh Law <objecting@objecting.org> Reviewed-by: SeongJae Park <sj@kernel.org> Signed-off-by: SeongJae Park <sj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-rw-r--r--mm/damon/core.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/mm/damon/core.c b/mm/damon/core.c
index f342bee002dc..db6c67e52d2b 100644
--- a/mm/damon/core.c
+++ b/mm/damon/core.c
@@ -1060,6 +1060,23 @@ static void damos_set_filters_default_reject(struct damos *s)
damos_filters_default_reject(&s->ops_filters);
}
+/*
+ * damos_commit_dests() - Copy migration destinations from @src to @dst.
+ * @dst: Destination structure to update.
+ * @src: Source structure to copy from.
+ *
+ * If the number of destinations has changed, the old arrays in @dst are freed
+ * and new ones are allocated. On success, @dst contains a full copy of
+ * @src's arrays and count.
+ *
+ * On allocation failure, @dst is left in a partially torn-down state: its
+ * arrays may be NULL and @nr_dests may not reflect the actual allocation
+ * sizes. The structure remains safe to deallocate via damon_destroy_scheme(),
+ * but callers must not reuse @dst for further commits — it should be
+ * discarded.
+ *
+ * Return: 0 on success, -ENOMEM on allocation failure.
+ */
static int damos_commit_dests(struct damos_migrate_dests *dst,
struct damos_migrate_dests *src)
{