Merge branch 'slab/for-6.1/slub_validation_locking' into slab/for-next

A fix for a regression in slub_debug caches that could cause slab page
leaks and subsequent warnings on cache shutdown, by Feng Tang.
This commit is contained in:
Vlastimil Babka 2022-09-30 16:46:18 +02:00
commit 00a7829ba8

View file

@ -2881,22 +2881,25 @@ static noinline void free_debug_processing(
set_freepointer(s, tail, prior);
slab->freelist = head;
/* Do we need to remove the slab from full or partial list? */
/*
* If the slab is empty, and node's partial list is full,
* it should be discarded anyway no matter it's on full or
* partial list.
*/
if (slab->inuse == 0 && n->nr_partial >= s->min_partial)
slab_free = slab;
if (!prior) {
/* was on full list */
remove_full(s, n, slab);
} else if (slab->inuse == 0 &&
n->nr_partial >= s->min_partial) {
if (!slab_free) {
add_partial(n, slab, DEACTIVATE_TO_TAIL);
stat(s, FREE_ADD_PARTIAL);
}
} else if (slab_free) {
remove_partial(n, slab);
stat(s, FREE_REMOVE_PARTIAL);
}
/* Do we need to discard the slab or add to partial list? */
if (slab->inuse == 0 && n->nr_partial >= s->min_partial) {
slab_free = slab;
} else if (!prior) {
add_partial(n, slab, DEACTIVATE_TO_TAIL);
stat(s, FREE_ADD_PARTIAL);
}
}
if (slab_free) {