mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
mm/damon/core: support committing ops_filters
DAMON kernel API callers should use damon_commit_ctx() to install DAMON parameters including DAMOS filters. But damos_commit_ops_filters(), which is called by damon_commit_ctx() for filters installing, is not handling damos->ops_filters. Hence, no DAMON kernel API caller can use damos->ops_filters. Do the committing of the ops_filters to make it usable. Link: https://lkml.kernel.org/r/20250304211913.53574-4-sj@kernel.org Signed-off-by: SeongJae Park <sj@kernel.org> Cc: Jonathan Corbet <corbet@lwn.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
ac7b094bf4
commit
3607cc590f
@ -820,7 +820,7 @@ static void damos_commit_filter(
|
||||
damos_commit_filter_arg(dst, src);
|
||||
}
|
||||
|
||||
static int damos_commit_filters(struct damos *dst, struct damos *src)
|
||||
static int damos_commit_core_filters(struct damos *dst, struct damos *src)
|
||||
{
|
||||
struct damos_filter *dst_filter, *next, *src_filter, *new_filter;
|
||||
int i = 0, j = 0;
|
||||
@ -848,6 +848,44 @@ static int damos_commit_filters(struct damos *dst, struct damos *src)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int damos_commit_ops_filters(struct damos *dst, struct damos *src)
|
||||
{
|
||||
struct damos_filter *dst_filter, *next, *src_filter, *new_filter;
|
||||
int i = 0, j = 0;
|
||||
|
||||
damos_for_each_ops_filter_safe(dst_filter, next, dst) {
|
||||
src_filter = damos_nth_filter(i++, src);
|
||||
if (src_filter)
|
||||
damos_commit_filter(dst_filter, src_filter);
|
||||
else
|
||||
damos_destroy_filter(dst_filter);
|
||||
}
|
||||
|
||||
damos_for_each_ops_filter_safe(src_filter, next, src) {
|
||||
if (j++ < i)
|
||||
continue;
|
||||
|
||||
new_filter = damos_new_filter(
|
||||
src_filter->type, src_filter->matching,
|
||||
src_filter->allow);
|
||||
if (!new_filter)
|
||||
return -ENOMEM;
|
||||
damos_commit_filter_arg(new_filter, src_filter);
|
||||
damos_add_filter(dst, new_filter);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int damos_commit_filters(struct damos *dst, struct damos *src)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = damos_commit_core_filters(dst, src);
|
||||
if (err)
|
||||
return err;
|
||||
return damos_commit_ops_filters(dst, src);
|
||||
}
|
||||
|
||||
static struct damos *damon_nth_scheme(int n, struct damon_ctx *ctx)
|
||||
{
|
||||
struct damos *s;
|
||||
|
Loading…
Reference in New Issue
Block a user