3 --- linux-2.4.20-8/arch/ia64/mm/init.c~kmem_cache_validate_2.4.20 2002-11-29 07:53:09.000000000 +0800
4 +++ linux-2.4.20-8-root/arch/ia64/mm/init.c 2003-06-01 01:44:13.000000000 +0800
5 @@ -45,6 +45,12 @@ static struct page *vmem_map;
6 static unsigned long num_dma_physpages;
9 +struct page *check_get_page(unsigned long kaddr)
11 +#warning FIXME: Lustre team, is this solid?
12 + return virt_to_page(kaddr);
16 do_check_pgt_cache (int low, int high)
18 --- linux-2.4.20-8/include/linux/slab.h~kmem_cache_validate_2.4.20 2002-11-29 07:53:15.000000000 +0800
19 +++ linux-2.4.20-8-root/include/linux/slab.h 2003-06-01 01:44:13.000000000 +0800
20 @@ -56,6 +56,7 @@ extern kmem_cache_t *kmem_cache_create(c
21 extern int kmem_cache_destroy(kmem_cache_t *);
22 extern int kmem_cache_shrink(kmem_cache_t *);
23 extern void *kmem_cache_alloc(kmem_cache_t *, int);
24 +extern int kmem_cache_validate(kmem_cache_t *cachep, void *objp);
25 extern void kmem_cache_free(kmem_cache_t *, void *);
26 extern unsigned int kmem_cache_size(kmem_cache_t *);
28 --- linux-2.4.20-8/kernel/ksyms.c~kmem_cache_validate_2.4.20 2003-06-01 01:44:11.000000000 +0800
29 +++ linux-2.4.20-8-root/kernel/ksyms.c 2003-06-01 01:44:13.000000000 +0800
30 @@ -103,6 +103,7 @@ EXPORT_SYMBOL(kmem_find_general_cachep);
31 EXPORT_SYMBOL(kmem_cache_create);
32 EXPORT_SYMBOL(kmem_cache_destroy);
33 EXPORT_SYMBOL(kmem_cache_shrink);
34 +EXPORT_SYMBOL(kmem_cache_validate);
35 EXPORT_SYMBOL(kmem_cache_alloc);
36 EXPORT_SYMBOL(kmem_cache_free);
37 EXPORT_SYMBOL(kmem_cache_size);
38 --- linux-2.4.20-8/mm/slab.c~kmem_cache_validate_2.4.20 2003-06-01 01:44:08.000000000 +0800
39 +++ linux-2.4.20-8-root/mm/slab.c 2003-06-01 01:44:13.000000000 +0800
40 @@ -1205,6 +1205,59 @@ failed:
41 * Called with the cache-lock held.
44 +extern struct page *check_get_page(unsigned long kaddr);
45 +struct page *page_mem_map(struct page *page);
46 +static int kmem_check_cache_obj (kmem_cache_t * cachep,
47 + slab_t *slabp, void * objp)
53 + if (cachep->flags & SLAB_RED_ZONE) {
54 + objp -= BYTES_PER_WORD;
55 + if ( *(unsigned long *)objp != RED_MAGIC2)
56 + /* Either write before start, or a double free. */
58 + if (*(unsigned long *)(objp+cachep->objsize -
59 + BYTES_PER_WORD) != RED_MAGIC2)
60 + /* Either write past end, or a double free. */
65 + objnr = (objp-slabp->s_mem)/cachep->objsize;
66 + if (objnr >= cachep->num)
68 + if (objp != slabp->s_mem + objnr*cachep->objsize)
71 + /* Check slab's freelist to see if this obj is there. */
72 + for (i = slabp->free; i != BUFCTL_END; i = slab_bufctl(slabp)[i]) {
80 +int kmem_cache_validate(kmem_cache_t *cachep, void *objp)
82 + struct page *page = check_get_page((unsigned long)objp);
84 + if (!VALID_PAGE(page))
87 + if (!PageSlab(page))
90 + /* XXX check for freed slab objects ? */
91 + if (!kmem_check_cache_obj(cachep, GET_PAGE_SLAB(page), objp))
94 + return (cachep == GET_PAGE_CACHE(page));
98 static int kmem_extra_free_checks (kmem_cache_t * cachep,
99 slab_t *slabp, void * objp)
100 --- linux-2.4.20-8/arch/i386/mm/init.c~kmem_cache_validate_2.4.20 2002-11-29 07:53:09.000000000 +0800
101 +++ linux-2.4.20-8-root/arch/i386/mm/init.c 2003-06-01 01:46:43.000000000 +0800
102 @@ -43,6 +43,12 @@ unsigned long highstart_pfn, highend_pfn
103 static unsigned long totalram_pages;
104 static unsigned long totalhigh_pages;
106 +struct page *check_get_page(unsigned long kaddr)
108 +#warning FIXME: Lustre team, is this solid?
109 + return virt_to_page(kaddr);
112 int do_check_pgt_cache(int low, int high)