Commit 00a7829b authored by Vlastimil Babka's avatar Vlastimil Babka
Browse files

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.
parents 445d41d7 b731e357
Loading
Loading
Loading
Loading
+14 −11
Original line number Diff line number Diff line
@@ -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) {
			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) {
			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);
		}
	}

	if (slab_free) {