* + mm-damon-sysfs-remove-requested-targets-when-online-commit-inputs-fix.patch added to mm-hotfixes-unstable branch
@ 2023-10-30 19:45 Andrew Morton
0 siblings, 0 replies; only message in thread
From: Andrew Morton @ 2023-10-30 19:45 UTC (permalink / raw)
To: mm-commits, sj, akpm
The patch titled
Subject: mm/damon/sysfs: fix unnecessary monitoring results removal when online-commit inputs
has been added to the -mm mm-hotfixes-unstable branch. Its filename is
mm-damon-sysfs-remove-requested-targets-when-online-commit-inputs-fix.patch
This patch will shortly appear at
https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/mm-damon-sysfs-remove-requested-targets-when-online-commit-inputs-fix.patch
This patch will later appear in the mm-hotfixes-unstable branch at
git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
Before you just go and hit "reply", please:
a) Consider who else should be cc'ed
b) Prefer to cc a suitable mailing list as well
c) Ideally: find the original patch on the mailing list and do a
reply-to-all to that, adding suitable additional cc's
*** Remember to use Documentation/process/submit-checklist.rst when testing your code ***
The -mm tree is included into linux-next via the mm-everything
branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
and is updated there every 2-3 working days
------------------------------------------------------
From: SeongJae Park <sj@kernel.org>
Subject: mm/damon/sysfs: fix unnecessary monitoring results removal when online-commit inputs
Date: Sat, 28 Oct 2023 21:33:53 +0000
Commit db27869df6ed ("mm/damon/sysfs: remove requested targets when
online-commit inputs") of mm-hotfixes-unstable tree[1] makes all targets
to removed and then added again based on the user input, for online-commit
inputs. The commit says it is inefficient but ok as below:
This could cause unnecessary memory dealloc and realloc operations,
but this is not a hot code path. Also, note that damon_target is
stateless, and hence no data is lost
But that's not true. 'struct target' is containing the monitoring results
('->regions_list'). As a result, the patch makes all previous monitoring
results to be removed for every online-commit inputs. Fix it by removing
targets only when really changed or removal is requested.
[1] https://lore.kernel.org/damon/20231022210735.46409-2-sj@kernel.org/
Link: https://lkml.kernel.org/r/20231028213353.45397-1-sj@kernel.org
Fixes: db27869df6ed ("mm/damon/sysfs: remove requested targets when online-commit inputs") # mm-hotfixes-unstable
Signed-off-by: SeongJae Park <sj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
mm/damon/sysfs.c | 44 +++++++++++++++++++++++++++++++++++++++-----
1 file changed, 39 insertions(+), 5 deletions(-)
--- a/mm/damon/sysfs.c~mm-damon-sysfs-remove-requested-targets-when-online-commit-inputs-fix
+++ a/mm/damon/sysfs.c
@@ -1150,23 +1150,57 @@ destroy_targets_out:
return err;
}
+static int damon_sysfs_update_target(struct damon_target *target,
+ struct damon_ctx *ctx,
+ struct damon_sysfs_target *sys_target)
+{
+ struct pid *pid;
+ struct damon_region *r, *next;
+
+ if (!damon_target_has_pid(ctx))
+ return 0;
+
+ pid = find_get_pid(sys_target->pid);
+ if (!pid)
+ return -EINVAL;
+
+ /* no change to the target */
+ if (pid == target->pid) {
+ put_pid(pid);
+ return 0;
+ }
+
+ /* remove old monitoring results and update the target's pid */
+ damon_for_each_region_safe(r, next, target)
+ damon_destroy_region(r, target);
+ put_pid(target->pid);
+ target->pid = pid;
+ return 0;
+}
+
static int damon_sysfs_set_targets(struct damon_ctx *ctx,
struct damon_sysfs_targets *sysfs_targets)
{
struct damon_target *t, *next;
- int i, err;
+ int i = 0, err;
/* Multiple physical address space monitoring targets makes no sense */
if (ctx->ops.id == DAMON_OPS_PADDR && sysfs_targets->nr > 1)
return -EINVAL;
damon_for_each_target_safe(t, next, ctx) {
- if (damon_target_has_pid(ctx))
- put_pid(t->pid);
- damon_destroy_target(t);
+ if (i < sysfs_targets->nr) {
+ damon_sysfs_update_target(t, ctx,
+ sysfs_targets->targets_arr[i]);
+ } else {
+ if (damon_target_has_pid(ctx))
+ put_pid(t->pid);
+ damon_destroy_target(t);
+ }
+ i++;
}
- for (i = 0; i < sysfs_targets->nr; i++) {
+ for (; i < sysfs_targets->nr; i++) {
struct damon_sysfs_target *st = sysfs_targets->targets_arr[i];
err = damon_sysfs_add_target(st, ctx);
_
Patches currently in -mm which might be from sj@kernel.org are
mm-damon-sysfs-remove-requested-targets-when-online-commit-inputs.patch
mm-damon-sysfs-remove-requested-targets-when-online-commit-inputs-fix.patch
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-10-30 19:45 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-30 19:45 + mm-damon-sysfs-remove-requested-targets-when-online-commit-inputs-fix.patch added to mm-hotfixes-unstable branch Andrew Morton
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.