1 arch/i386/mm/init.c | 6 +++++
2 arch/ia64/mm/init.c | 6 +++++
3 include/linux/slab.h | 1
5 mm/slab.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++
6 5 files changed, 67 insertions(+)
8 --- linux/arch/ia64/mm/init.c~kmem_cache_validate_hp 2003-04-11 14:24:25.000000000 +0800
9 +++ linux-root/arch/ia64/mm/init.c 2003-05-16 20:03:56.000000000 +0800
10 @@ -45,6 +45,12 @@ unsigned long vmalloc_end = VMALLOC_END_
11 static struct page *vmem_map;
12 static unsigned long num_dma_physpages;
14 +struct page *check_get_page(unsigned long kaddr)
16 +#warning FIXME: Lustre team, is this solid?
17 + return virt_to_page(kaddr);
21 do_check_pgt_cache (int low, int high)
23 --- linux/include/linux/slab.h~kmem_cache_validate_hp 2002-11-29 07:53:15.000000000 +0800
24 +++ linux-root/include/linux/slab.h 2003-05-16 20:03:56.000000000 +0800
25 @@ -56,6 +56,7 @@ extern kmem_cache_t *kmem_cache_create(c
26 extern int kmem_cache_destroy(kmem_cache_t *);
27 extern int kmem_cache_shrink(kmem_cache_t *);
28 extern void *kmem_cache_alloc(kmem_cache_t *, int);
29 +extern int kmem_cache_validate(kmem_cache_t *cachep, void *objp);
30 extern void kmem_cache_free(kmem_cache_t *, void *);
31 extern unsigned int kmem_cache_size(kmem_cache_t *);
33 --- linux/kernel/ksyms.c~kmem_cache_validate_hp 2003-05-16 20:03:55.000000000 +0800
34 +++ linux-root/kernel/ksyms.c 2003-05-16 20:03:56.000000000 +0800
35 @@ -119,6 +119,7 @@ EXPORT_SYMBOL(kmem_find_general_cachep);
36 EXPORT_SYMBOL(kmem_cache_create);
37 EXPORT_SYMBOL(kmem_cache_destroy);
38 EXPORT_SYMBOL(kmem_cache_shrink);
39 +EXPORT_SYMBOL(kmem_cache_validate);
40 EXPORT_SYMBOL(kmem_cache_alloc);
41 EXPORT_SYMBOL(kmem_cache_free);
42 EXPORT_SYMBOL(kmem_cache_size);
43 --- linux/mm/slab.c~kmem_cache_validate_hp 2002-11-29 07:53:15.000000000 +0800
44 +++ linux-root/mm/slab.c 2003-05-16 20:03:56.000000000 +0800
45 @@ -1205,6 +1205,59 @@ failed:
46 * Called with the cache-lock held.
49 +extern struct page *check_get_page(unsigned long kaddr);
50 +struct page *page_mem_map(struct page *page);
51 +static int kmem_check_cache_obj (kmem_cache_t * cachep,
52 + slab_t *slabp, void * objp)
58 + if (cachep->flags & SLAB_RED_ZONE) {
59 + objp -= BYTES_PER_WORD;
60 + if ( *(unsigned long *)objp != RED_MAGIC2)
61 + /* Either write before start, or a double free. */
63 + if (*(unsigned long *)(objp+cachep->objsize -
64 + BYTES_PER_WORD) != RED_MAGIC2)
65 + /* Either write past end, or a double free. */
70 + objnr = (objp-slabp->s_mem)/cachep->objsize;
71 + if (objnr >= cachep->num)
73 + if (objp != slabp->s_mem + objnr*cachep->objsize)
76 + /* Check slab's freelist to see if this obj is there. */
77 + for (i = slabp->free; i != BUFCTL_END; i = slab_bufctl(slabp)[i]) {
85 +int kmem_cache_validate(kmem_cache_t *cachep, void *objp)
87 + struct page *page = check_get_page((unsigned long)objp);
89 + if (!VALID_PAGE(page))
92 + if (!PageSlab(page))
95 + /* XXX check for freed slab objects ? */
96 + if (!kmem_check_cache_obj(cachep, GET_PAGE_SLAB(page), objp))
99 + return (cachep == GET_PAGE_CACHE(page));
103 static int kmem_extra_free_checks (kmem_cache_t * cachep,
104 slab_t *slabp, void * objp)
105 --- linux/arch/i386/mm/init.c~kmem_cache_validate_hp 2003-05-16 20:03:22.000000000 +0800
106 +++ linux-root/arch/i386/mm/init.c 2003-05-16 20:06:16.000000000 +0800
107 @@ -42,6 +42,12 @@ mmu_gather_t mmu_gathers[NR_CPUS];
108 unsigned long highstart_pfn, highend_pfn;
109 static unsigned long totalram_pages;
110 static unsigned long totalhigh_pages;
112 +struct page *check_get_page(unsigned long kaddr)
114 +#warning FIXME: Lustre team, is this solid?
115 + return virt_to_page(kaddr);
118 int do_check_pgt_cache(int low, int high)