mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 09:04:39 +02:00
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: Harry Yoo <harry.yoo@oracle.com> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
This commit is contained in:
parent
6f6fcd4634
commit
40522db59b
30
mm/slub.c
30
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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user