From: Philippe Elie <phil.el@wanadoo.fr>

If drain_array_locked() is passed the `force' command, it must go in and
empty the head array.



 mm/slab.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

diff -puN mm/slab.c~slab-drain_array-fix mm/slab.c
--- 25/mm/slab.c~slab-drain_array-fix	2003-08-18 22:27:21.000000000 -0700
+++ 25-akpm/mm/slab.c	2003-08-18 22:27:21.000000000 -0700
@@ -2355,7 +2355,7 @@ static void drain_array_locked(kmem_cach
 	int tofree;
 
 	check_spinlock_acquired(cachep);
-	if (ac->touched) {
+	if (ac->touched && !force) {
 		ac->touched = 0;
 	} else if (ac->avail) {
 		tofree = force ? ac->avail : (ac->limit+4)/5;

_