mm: vmalloc: add a scan area of VA only once
authorUladzislau Rezki (Sony) <urezki@gmail.com>
Fri, 2 Feb 2024 19:06:28 +0000 (20:06 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Sat, 24 Feb 2024 01:48:20 +0000 (17:48 -0800)
Invoke a kmemleak_scan_area() function only for newly allocated objects to
add a scan area within that object.  There is no reason to add a same scan
area(pointer to beginning or inside the object) several times.  If a VA is
obtained from the cache its scan area has already been associated.

Link: https://lkml.kernel.org/r/20240202190628.47806-1-urezki@gmail.com
Fixes: 7db166b4aa0d ("mm: vmalloc: offload free_vmap_area_lock lock")
Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
Reviewed-by: Lorenzo Stoakes <lstoakes@gmail.com>
Cc: Baoquan He <bhe@redhat.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Joel Fernandes (Google) <joel@joelfernandes.org>
Cc: Kazuhito Hagio <k-hagio-ab@nec.com>
Cc: Liam R. Howlett <Liam.Howlett@oracle.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Oleksiy Avramchenko <oleksiy.avramchenko@sony.com>
Cc: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/vmalloc.c

index e8b9621ea02b46e410657b29b9c81332ce00bbfc..75e96cf377ef3473f1301f6c12349458d7e9683e 100644 (file)
@@ -1834,13 +1834,13 @@ static struct vmap_area *alloc_vmap_area(unsigned long size,
                va = kmem_cache_alloc_node(vmap_area_cachep, gfp_mask, node);
                if (unlikely(!va))
                        return ERR_PTR(-ENOMEM);
-       }
 
-       /*
-        * Only scan the relevant parts containing pointers to other objects
-        * to avoid false negatives.
-        */
-       kmemleak_scan_area(&va->rb_node, SIZE_MAX, gfp_mask);
+               /*
+                * Only scan the relevant parts containing pointers to other objects
+                * to avoid false negatives.
+                */
+               kmemleak_scan_area(&va->rb_node, SIZE_MAX, gfp_mask);
+       }
 
 retry:
        if (addr == vend) {