SLUB: Remove checks for MAX_PARTIAL from kmem_cache_shrink

The MAX_PARTIAL checks were supposed to be an optimization. However, slab
shrinking is a manually triggered process either through running slabinfo
or by the kernel calling kmem_cache_shrink.

If one really wants to shrink a slab then all operations should be done
regardless of the size of the partial list. This also fixes an issue that
could surface if the number of partial slabs was initially above MAX_PARTIAL
in kmem_cache_shrink and later drops below MAX_PARTIAL through the
elimination of empty slabs on the partial list (rare). In that case a few
slabs may be left off the partial list (and only be put back when they
are empty).

Signed-off-by: Christoph Lameter <clameter@sgi.com>

+2 -7
+2 -7
mm/slub.c
··· 2500 2500 slab_unlock(page); 2501 2501 discard_slab(s, page); 2502 2502 } else { 2503 - if (n->nr_partial > MAX_PARTIAL) 2504 - list_move(&page->lru, 2505 - slabs_by_inuse + page->inuse); 2503 + list_move(&page->lru, 2504 + slabs_by_inuse + page->inuse); 2506 2505 } 2507 2506 } 2508 - 2509 - if (n->nr_partial <= MAX_PARTIAL) 2510 - goto out; 2511 2507 2512 2508 /* 2513 2509 * Rebuild the partial list with the slabs filled up most ··· 2512 2516 for (i = s->objects - 1; i >= 0; i--) 2513 2517 list_splice(slabs_by_inuse + i, n->partial.prev); 2514 2518 2515 - out: 2516 2519 spin_unlock_irqrestore(&n->list_lock, flags); 2517 2520 } 2518 2521