2002-10-04 18:02:10

by Manfred Spraul

[permalink] [raw]
Subject: [PATCH] patch-slab-split-04-drain

--- 2.5/mm/slab.c Fri Oct 4 19:05:15 2002
+++ build-2.5/mm/slab.c Fri Oct 4 19:36:13 2002
@@ -917,29 +917,19 @@

static void free_block (kmem_cache_t* cachep, void** objpp, int len);

-static void drain_cpu_caches(kmem_cache_t *cachep)
+static void do_drain(void *arg)
{
- ccupdate_struct_t new;
- int i;
-
- memset(&new.new,0,sizeof(new.new));
-
- new.cachep = cachep;
+ kmem_cache_t *cachep = (kmem_cache_t*)arg;
+ cpucache_t *cc;

- down(&cache_chain_sem);
- smp_call_function_all_cpus(do_ccupdate_local, (void *)&new);
+ cc = cc_data(cachep);
+ free_block(cachep, &cc_entry(cc)[0], cc->avail);
+ cc->avail = 0;
+}

- for (i = 0; i < NR_CPUS; i++) {
- cpucache_t* ccold = new.new[i];
- if (!ccold || (ccold->avail == 0))
- continue;
- local_irq_disable();
- free_block(cachep, cc_entry(ccold), ccold->avail);
- local_irq_enable();
- ccold->avail = 0;
- }
- smp_call_function_all_cpus(do_ccupdate_local, (void *)&new);
- up(&cache_chain_sem);
+static void drain_cpu_caches(kmem_cache_t *cachep)
+{
+ smp_call_function_all_cpus(do_drain, cachep);
}

static int __cache_shrink(kmem_cache_t *cachep)


Attachments:
patch-slab-split-04-drain (1.09 kB)