Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux
[sfrench/cifs-2.6.git] / mm / slub.c
index b25c807a111f43fa77cd1ab3b10218f9323627e2..e72e802fc569d53413ce32f0f4e9d9fdf6762c23 100644 (file)
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -1433,12 +1433,15 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s,
        void *old_tail = *tail ? *tail : *head;
        int rsize;
 
-       if (slab_want_init_on_free(s)) {
-               void *p = NULL;
+       /* Head and tail of the reconstructed freelist */
+       *head = NULL;
+       *tail = NULL;
 
-               do {
-                       object = next;
-                       next = get_freepointer(s, object);
+       do {
+               object = next;
+               next = get_freepointer(s, object);
+
+               if (slab_want_init_on_free(s)) {
                        /*
                         * Clear the object and the metadata, but don't touch
                         * the redzone.
@@ -1448,29 +1451,8 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s,
                                                           : 0;
                        memset((char *)object + s->inuse, 0,
                               s->size - s->inuse - rsize);
-                       set_freepointer(s, object, p);
-                       p = object;
-               } while (object != old_tail);
-       }
-
-/*
- * Compiler cannot detect this function can be removed if slab_free_hook()
- * evaluates to nothing.  Thus, catch all relevant config debug options here.
- */
-#if defined(CONFIG_LOCKDEP)    ||              \
-       defined(CONFIG_DEBUG_KMEMLEAK) ||       \
-       defined(CONFIG_DEBUG_OBJECTS_FREE) ||   \
-       defined(CONFIG_KASAN)
 
-       next = *head;
-
-       /* Head and tail of the reconstructed freelist */
-       *head = NULL;
-       *tail = NULL;
-
-       do {
-               object = next;
-               next = get_freepointer(s, object);
+               }
                /* If object's reuse doesn't have to be delayed */
                if (!slab_free_hook(s, object)) {
                        /* Move object to the new freelist */
@@ -1485,9 +1467,6 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s,
                *tail = NULL;
 
        return *head != NULL;
-#else
-       return true;
-#endif
 }
 
 static void *setup_object(struct kmem_cache *s, struct page *page,