mirror of
https://github.com/torvalds/linux.git
synced 2026-01-24 23:16:46 +00:00
mm/damon/sysfs-scheme: cleanup access_pattern subdirs on scheme dir setup failure
When a DAMOS-scheme DAMON sysfs directory setup fails after setup of
access_pattern/ directory, subdirectories of access_pattern/ directory are
not cleaned up. As a result, DAMON sysfs interface is nearly broken until
the system reboots, and the memory for the unremoved directory is leaked.
Cleanup the directories under such failures.
Link: https://lkml.kernel.org/r/20251225023043.18579-5-sj@kernel.org
Fixes: 9bbb820a5b ("mm/damon/sysfs: support DAMOS quotas")
Signed-off-by: SeongJae Park <sj@kernel.org>
Cc: chongjiapeng <jiapeng.chong@linux.alibaba.com>
Cc: <stable@vger.kernel.org> # 5.18.x
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
dc7e1d75fd
commit
392b3d9d59
@@ -2152,7 +2152,7 @@ static int damon_sysfs_scheme_add_dirs(struct damon_sysfs_scheme *scheme)
|
|||||||
return err;
|
return err;
|
||||||
err = damos_sysfs_set_dests(scheme);
|
err = damos_sysfs_set_dests(scheme);
|
||||||
if (err)
|
if (err)
|
||||||
goto put_access_pattern_out;
|
goto rmdir_put_access_pattern_out;
|
||||||
err = damon_sysfs_scheme_set_quotas(scheme);
|
err = damon_sysfs_scheme_set_quotas(scheme);
|
||||||
if (err)
|
if (err)
|
||||||
goto put_dests_out;
|
goto put_dests_out;
|
||||||
@@ -2190,7 +2190,8 @@ rmdir_put_quotas_access_pattern_out:
|
|||||||
put_dests_out:
|
put_dests_out:
|
||||||
kobject_put(&scheme->dests->kobj);
|
kobject_put(&scheme->dests->kobj);
|
||||||
scheme->dests = NULL;
|
scheme->dests = NULL;
|
||||||
put_access_pattern_out:
|
rmdir_put_access_pattern_out:
|
||||||
|
damon_sysfs_access_pattern_rm_dirs(scheme->access_pattern);
|
||||||
kobject_put(&scheme->access_pattern->kobj);
|
kobject_put(&scheme->access_pattern->kobj);
|
||||||
scheme->access_pattern = NULL;
|
scheme->access_pattern = NULL;
|
||||||
return err;
|
return err;
|
||||||
|
|||||||
Reference in New Issue
Block a user