]> www.infradead.org Git - users/willy/linux.git/commitdiff
mm/slub: Convert object_err() to take a struct slab
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Sat, 2 Oct 2021 02:33:39 +0000 (22:33 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Mon, 4 Oct 2021 13:18:00 +0000 (09:18 -0400)
Improves type safety and removes a lot of calls to slab_page().
Also make object_err() static.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
include/linux/slub_def.h
mm/slub.c

index 3cc64e9f988cd303d9bb2d1b6271c13c65feec83..63eae033d713f9a75b90295b280c462f2026b499 100644 (file)
@@ -165,9 +165,6 @@ static inline void sysfs_slab_release(struct kmem_cache *s)
 }
 #endif
 
-void object_err(struct kmem_cache *s, struct page *page,
-               u8 *object, char *reason);
-
 void *fixup_red_left(struct kmem_cache *s, void *p);
 
 static inline void *nearest_obj(struct kmem_cache *cache, struct page *page,
index 524e3c7eac3036765db0d692f298bf2ca6efe44d..a93a6d679de2e5d3ca43af8c2ffd85a93fc1e104 100644 (file)
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -799,12 +799,15 @@ static void slab_fix(struct kmem_cache *s, char *fmt, ...)
        va_end(args);
 }
 
+static void object_err(struct kmem_cache *s, struct slab *slab,
+               u8 *object, char *reason);
+
 static bool freelist_corrupted(struct kmem_cache *s, struct slab *slab,
                               void **freelist, void *nextfree)
 {
        if ((s->flags & SLAB_CONSISTENCY_CHECKS) &&
            !check_valid_pointer(s, slab, nextfree) && freelist) {
-               object_err(s, slab_page(slab), *freelist, "Freechain corrupt");
+               object_err(s, slab, *freelist, "Freechain corrupt");
                *freelist = NULL;
                slab_fix(s, "Isolate corrupted freechain");
                return true;
@@ -852,14 +855,14 @@ static void print_trailer(struct kmem_cache *s, struct page *page, u8 *p)
        dump_stack();
 }
 
-void object_err(struct kmem_cache *s, struct page *page,
+static void object_err(struct kmem_cache *s, struct slab *slab,
                        u8 *object, char *reason)
 {
        if (slab_add_kunit_errors())
                return;
 
        slab_bug(s, "%s", reason);
-       print_trailer(s, page, object);
+       print_trailer(s, slab_page(slab), object);
        add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE);
 }
 
@@ -1073,7 +1076,7 @@ static int check_object(struct kmem_cache *s, struct slab *slab,
 
        /* Check free pointer validity */
        if (!check_valid_pointer(s, slab, get_freepointer(s, p))) {
-               object_err(s, slab_page(slab), p, "Freepointer corrupt");
+               object_err(s, slab, p, "Freepointer corrupt");
                /*
                 * No choice but to zap it and thus lose the remainder
                 * of the free objects in this slab. May cause
@@ -1127,7 +1130,7 @@ static int on_freelist(struct kmem_cache *s, struct slab *slab, void *search)
                        return 1;
                if (!check_valid_pointer(s, slab, fp)) {
                        if (object) {
-                               object_err(s, slab_page(slab), object,
+                               object_err(s, slab, object,
                                        "Freechain corrupt");
                                set_freepointer(s, object, NULL);
                        } else {
@@ -1267,7 +1270,7 @@ static inline int alloc_consistency_checks(struct kmem_cache *s,
                return 0;
 
        if (!check_valid_pointer(s, slab, object)) {
-               object_err(s, slab_page(slab), object, "Freelist Pointer check fails");
+               object_err(s, slab, object, "Freelist Pointer check fails");
                return 0;
        }
 
@@ -1316,7 +1319,7 @@ static inline int free_consistency_checks(struct kmem_cache *s,
        }
 
        if (on_freelist(s, slab, object)) {
-               object_err(s, slab_page(slab), object, "Object already free");
+               object_err(s, slab, object, "Object already free");
                return 0;
        }
 
@@ -1332,8 +1335,7 @@ static inline int free_consistency_checks(struct kmem_cache *s,
                               object);
                        dump_stack();
                } else
-                       object_err(s, slab_page(slab), object,
-                                       "slab pointer corrupt.");
+                       object_err(s, slab, object, "slab pointer corrupt.");
                return 0;
        }
        return 1;