Commit 40522db5 authored by Vlastimil Babka's avatar Vlastimil Babka
Browse files

slab: move validate_slab_ptr() from alloc_consistency_checks() to its caller



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: default avatarHarry Yoo <harry.yoo@oracle.com>
Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
parent 6f6fcd46
Loading
Loading
Loading
Loading
+14 −16
Original line number Diff line number Diff line
@@ -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.
	 * 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;
}