Messages in this thread Patch in this message | | | Date | Wed, 21 Feb 2007 10:30:12 +0200 (EET) | From | Pekka J Enberg <> | Subject | [PATCH] slab: ensure cache_alloc_refill terminates |
| |
From: Pekka Enberg <penberg@cs.helsinki.fi>
If slab->inuse is corrupted, cache_alloc_refill can enter an infinite loop as detailed by Michael Richardson in the following post: <http://lkml.org/lkml/2007/2/16/292>. This adds a BUG_ON to catch those cases.
Cc: Michael Richardson <mcr@sandelman.ca> Cc: Christoph Lameter <clameter@sgi.com> Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi> --- mm/slab.c | 8 ++++++++ 1 file changed, 8 insertions(+)
Index: 2.6/mm/slab.c =================================================================== --- 2.6.orig/mm/slab.c 2007-02-19 15:15:17.000000000 +0200 +++ 2.6/mm/slab.c 2007-02-20 08:39:26.000000000 +0200 @@ -2987,6 +2987,14 @@ slabp = list_entry(entry, struct slab, list); check_slabp(cachep, slabp); check_spinlock_acquired(cachep); + + /* + * The slab was either on partial or free list so + * there must be at least one object available for + * allocation. + */ + BUG_ON(slabp->inuse < 0 || slabp->inuse >= cachep->num); + while (slabp->inuse < cachep->num && batchcount--) { STATS_INC_ALLOCED(cachep); STATS_INC_ACTIVE(cachep); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |