]> www.infradead.org Git - users/hch/misc.git/commitdiff
slab: move validate_slab_ptr() from alloc_consistency_checks() to its caller
authorVlastimil Babka <vbabka@suse.cz>
Mon, 15 Sep 2025 13:55:11 +0000 (15:55 +0200)
committerVlastimil Babka <vbabka@suse.cz>
Mon, 15 Sep 2025 14:10:10 +0000 (16:10 +0200)
In alloc_debug_processing() we can call validate_slab_ptr() upfront and
then don't need to recheck when alloc_consistency_checks() fails for
other reasons.

Reviewed-by: Harry Yoo <harry.yoo@oracle.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
mm/slub.c

index 6fb24010c17019ed304b4ef61f402212dd634efb..12ad42f3d2e066b02340f2c30a85422583af3c5d 100644 (file)
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -1633,11 +1633,6 @@ void setup_slab_debug(struct kmem_cache *s, struct slab *slab, void *addr)
 static inline int alloc_consistency_checks(struct kmem_cache *s,
                                        struct slab *slab, void *object)
 {
-       if (!validate_slab_ptr(slab)) {
-               slab_err(s, slab, "Not a valid slab page");
-               return 0;
-       }
-
        if (!check_slab(s, slab))
                return 0;
 
@@ -1656,6 +1651,11 @@ static noinline bool alloc_debug_processing(struct kmem_cache *s,
                        struct slab *slab, void *object, int orig_size)
 {
        if (s->flags & SLAB_CONSISTENCY_CHECKS) {
+               if (!validate_slab_ptr(slab)) {
+                       slab_err(s, slab, "Not a valid slab page");
+                       return false;
+               }
+
                if (!alloc_consistency_checks(s, slab, object))
                        goto bad;
        }
@@ -1667,17 +1667,15 @@ static noinline bool alloc_debug_processing(struct kmem_cache *s,
        return true;
 
 bad:
-       if (validate_slab_ptr(slab)) {
-               /*
-                * If this is a slab page then lets do the best we can
-                * to avoid issues in the future. Marking all objects
-                * as used avoids touching the remaining objects.
-                */
-               slab_fix(s, "Marking all objects used");
-               slab->inuse = slab->objects;
-               slab->freelist = NULL;
-               slab->frozen = 1; /* mark consistency-failed slab as frozen */
-       }
+       /*
+        * Let's do the best we can to avoid issues in the future. Marking all
+        * objects as used avoids touching the remaining objects.
+        */
+       slab_fix(s, "Marking all objects used");
+       slab->inuse = slab->objects;
+       slab->freelist = NULL;
+       slab->frozen = 1; /* mark consistency-failed slab as frozen */
+
        return false;
 }