Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Low] alloc_tag: unused function shutdown_mem_profiling_async() when !CONFIG_MODULES --
commit ec0095b3ecdd2d01651f48bc80cc81d976e06106 Author: Christian Brauner <[email protected]> alloc_tag: don't remove /proc/allocinfo under the codetag module lock This commit defers removing /proc/allocinfo to a work item when reserve_module_tags() fails, avoiding a deadlock between remove_proc_entry() waiting on active procfs readers and allocinfo_start() waiting on the codetag module lock. > diff --git a/mm/alloc_tag.c b/mm/alloc_tag.c > index 82e2c3448dcf2..7d7ad67049537 100644 > --- a/mm/alloc_tag.c > +++ b/mm/alloc_tag.c [ ... ] > @@ -604,6 +605,26 @@ static void shutdown_mem_profiling(bool remove_file) > mem_profiling_support = false; > } > > +static void remove_allocinfo_file(struct work_struct *work) > +{ > + remove_proc_entry(ALLOCINFO_FILE_NAME, NULL); > +} > +static DECLARE_WORK(remove_allocinfo_work, remove_allocinfo_file); > + > +/* > + * A module's tags are reserved with the codetag module lock held for > + * writing, and a reader of /proc/allocinfo takes that lock with the entry > + * pinned. Removing the entry there would wait for that reader for good, so > + * let a work item do it. > + */ > +static void shutdown_mem_profiling_async(void) > +{ > + if (!mem_profiling_support) > + return; > + shutdown_mem_profiling(false); > + schedule_work(&remove_allocinfo_work); > +} [Severity: Low] All callers of shutdown_mem_profiling_async() are in reserve_module_tags(), which is inside the #ifdef CONFIG_MODULES block further down in mm/alloc_tag.c. When building with CONFIG_MEM_ALLOC_PROFILING=y and CONFIG_MODULES=n, will defining remove_allocinfo_file(), remove_allocinfo_work, and shutdown_mem_profiling_async() outside #ifdef CONFIG_MODULES trigger an unused-function compiler warning? -- Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=1
