Whamcloud - gitweb
- missed patches from suse-2.4.21-2 series added
[fs/lustre-release.git] / lustre / kernel_patches / patches / kmem_cache_validate_2.4.20.patch
1  0 files changed
2
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;
7  #endif
8  
9 +struct page *check_get_page(unsigned long kaddr)
10 +{
11 +#warning FIXME: Lustre team, is this solid?
12 +       return virt_to_page(kaddr);
13 +}
14 +
15  int
16  do_check_pgt_cache (int low, int high)
17  {
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 *);
27  
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.
42   */
43  
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)
48 +{
49 +       int i;
50 +       unsigned int objnr;
51 +
52 +#if DEBUG
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. */
57 +                       return 0;
58 +               if (*(unsigned long *)(objp+cachep->objsize -
59 +                               BYTES_PER_WORD) != RED_MAGIC2)
60 +                       /* Either write past end, or a double free. */
61 +                       return 0;
62 +       }
63 +#endif
64 +
65 +       objnr = (objp-slabp->s_mem)/cachep->objsize;
66 +       if (objnr >= cachep->num)
67 +               return 0;
68 +       if (objp != slabp->s_mem + objnr*cachep->objsize)
69 +               return 0;
70 +
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]) {
73 +               if (i == objnr)
74 +                       return 0;
75 +       }
76 +       return 1;
77 +}
78 +
79 +
80 +int kmem_cache_validate(kmem_cache_t *cachep, void *objp)
81 +{
82 +       struct page *page = check_get_page((unsigned long)objp);
83 +
84 +       if (!VALID_PAGE(page))
85 +               return 0;
86 +
87 +       if (!PageSlab(page))
88 +               return 0;
89 +
90 +       /* XXX check for freed slab objects ? */
91 +       if (!kmem_check_cache_obj(cachep, GET_PAGE_SLAB(page), objp))
92 +               return 0;
93 +
94 +       return (cachep == GET_PAGE_CACHE(page));
95 +}
96 +
97  #if DEBUG
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;
105  
106 +struct page *check_get_page(unsigned long kaddr)
107 +{
108 +#warning FIXME: Lustre team, is this solid?
109 +               return virt_to_page(kaddr);
110 +}
111 +
112  int do_check_pgt_cache(int low, int high)
113  {
114         int freed = 0;
115
116 _