On Sun, Aug 10, 2025 at 9:42 PM Sang-Heon Jeon ekffu200098@gmail.com wrote:
damos_commit_ops_filters() incorrectly uses damos_nth_filter() which iterates core_filters. As a result, performing a commit unintentionally corrupts ops_filters.
Add damos_nth_ops_filter() which iterates ops_filters. Use this function to fix issues caused by wrong iteration.
Fixes: 3607cc590f18 ("mm/damon/core: support committing ops_filters") # 6.15.x Cc: stable@vger.kernel.org Signed-off-by: Sang-Heon Jeon ekffu200098@gmail.com
I just forgot to add change logs.
Changes from v1 [1]: 1. Fix code and commit message style. 2. Merge patch set into one patch. 3. Add fixes and cc section for backporting.
Changes from v2 [2]: 1. Separate the patch into two parts(code modifications and tests) And this is part of code
[1] https://lore.kernel.org/damon/20250808195518.563053-1-ekffu200098@gmail.com/ [2] https://lore.kernel.org/damon/20250809130756.637304-1-ekffu200098@gmail.com/
mm/damon/core.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/mm/damon/core.c b/mm/damon/core.c index 883d791a10e5..19c8f01fc81a 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -862,6 +862,18 @@ static struct damos_filter *damos_nth_filter(int n, struct damos *s) return NULL; }
+static struct damos_filter *damos_nth_ops_filter(int n, struct damos *s) +{
struct damos_filter *filter;
int i = 0;
damos_for_each_ops_filter(filter, s) {
if (i++ == n)
return filter;
}
return NULL;
+}
static void damos_commit_filter_arg( struct damos_filter *dst, struct damos_filter *src) { @@ -925,7 +937,7 @@ static int damos_commit_ops_filters(struct damos *dst, struct damos *src) int i = 0, j = 0;
damos_for_each_ops_filter_safe(dst_filter, next, dst) {
src_filter = damos_nth_filter(i++, src);
src_filter = damos_nth_ops_filter(i++, src); if (src_filter) damos_commit_filter(dst_filter, src_filter); else
-- 2.43.0