mirror of
https://github.com/torvalds/linux.git
synced 2026-09-13 15:40:03 +02:00
mm: kmemleak: factor leak confirmation into a helper
The reporting loop in kmemleak_scan() decided whether to tag an object as a reported leak with a four-term compound condition whose last operand also had a side effect (++object->unref_scans). Mixing the candidate tests with the counter update made the check hard to read. Move the state transition into confirm_leak(): it returns true when a still-unreferenced suspect crosses min_unref_scans consecutive scans and is newly flagged OBJECT_REPORTED, leaving only the reporting bookkeeping in the caller. No functional change. Link: https://lore.kernel.org/20260713-catalin_pto-v1-3-5b93b1131089@debian.org Signed-off-by: Breno Leitao <leitao@debian.org> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Cc: David Hildenbrand <david@kernel.org> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Liam R. Howlett <liam@infradead.org> Cc: Lorenzo Stoakes <ljs@kernel.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Rapoport <rppt@kernel.org> Cc: Shuah Khan <shuah@kernel.org> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Vlastimil Babka <vbabka@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
e776db8e71
commit
70a964bafe
|
|
@ -2014,6 +2014,26 @@ static int __kmemleak_scan(bool full)
|
|||
return nr_suspects;
|
||||
}
|
||||
|
||||
/*
|
||||
* Promote a suspected object to a reported leak once it has stayed
|
||||
* unreferenced for min_unref_scans consecutive scans. Called with
|
||||
* object->lock held; returns true when the object is newly reported.
|
||||
*/
|
||||
static bool confirm_leak(struct kmemleak_object *object)
|
||||
{
|
||||
if (!unreferenced_object(object) ||
|
||||
!(object->flags & OBJECT_SUSPECT) ||
|
||||
(object->flags & OBJECT_REPORTED))
|
||||
return false;
|
||||
|
||||
object->unref_scans += 1;
|
||||
if (object->unref_scans < min_unref_scans)
|
||||
return false;
|
||||
|
||||
object->flags |= OBJECT_REPORTED;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Scan the memory and report the unreferenced objects as leaks. Must be
|
||||
* called with the scan_mutex held.
|
||||
|
|
@ -2074,11 +2094,7 @@ static void kmemleak_scan(void)
|
|||
trace_handle = 0;
|
||||
dedup_print = false;
|
||||
|
||||
if (unreferenced_object(object) &&
|
||||
(object->flags & OBJECT_SUSPECT) &&
|
||||
!(object->flags & OBJECT_REPORTED) &&
|
||||
++object->unref_scans >= min_unref_scans) {
|
||||
object->flags |= OBJECT_REPORTED;
|
||||
if (confirm_leak(object)) {
|
||||
if (kmemleak_verbose) {
|
||||
trace_handle = object->trace_handle;
|
||||
dedup_print = true;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user