git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[XFS] use scalable vmap API
[safe/jmp/linux-2.6]
/
mm
/
slob.c
diff --git
a/mm/slob.c
b/mm/slob.c
index
6038cba
..
bf7e8fc
100644
(file)
--- a/
mm/slob.c
+++ b/
mm/slob.c
@@
-130,17
+130,17
@@
static LIST_HEAD(free_slob_large);
*/
static inline int slob_page(struct slob_page *sp)
{
*/
static inline int slob_page(struct slob_page *sp)
{
- return
test_bit(PG_active, &sp->flags
);
+ return
PageSlobPage((struct page *)sp
);
}
static inline void set_slob_page(struct slob_page *sp)
{
}
static inline void set_slob_page(struct slob_page *sp)
{
- __
set_bit(PG_active, &sp->flags
);
+ __
SetPageSlobPage((struct page *)sp
);
}
static inline void clear_slob_page(struct slob_page *sp)
{
}
static inline void clear_slob_page(struct slob_page *sp)
{
- __
clear_bit(PG_active, &sp->flags
);
+ __
ClearPageSlobPage((struct page *)sp
);
}
/*
}
/*
@@
-148,19
+148,19
@@
static inline void clear_slob_page(struct slob_page *sp)
*/
static inline int slob_page_free(struct slob_page *sp)
{
*/
static inline int slob_page_free(struct slob_page *sp)
{
- return
test_bit(PG_private, &sp->flags
);
+ return
PageSlobFree((struct page *)sp
);
}
static void set_slob_page_free(struct slob_page *sp, struct list_head *list)
{
list_add(&sp->list, list);
}
static void set_slob_page_free(struct slob_page *sp, struct list_head *list)
{
list_add(&sp->list, list);
- __
set_bit(PG_private, &sp->flags
);
+ __
SetPageSlobFree((struct page *)sp
);
}
static inline void clear_slob_page_free(struct slob_page *sp)
{
list_del(&sp->list);
}
static inline void clear_slob_page_free(struct slob_page *sp)
{
list_del(&sp->list);
- __
clear_bit(PG_private, &sp->flags
);
+ __
ClearPageSlobFree((struct page *)sp
);
}
#define SLOB_UNIT sizeof(slob_t)
}
#define SLOB_UNIT sizeof(slob_t)
@@
-469,8
+469,9
@@
void *__kmalloc_node(size_t size, gfp_t gfp, int node)
return ZERO_SIZE_PTR;
m = slob_alloc(size + align, gfp, align, node);
return ZERO_SIZE_PTR;
m = slob_alloc(size + align, gfp, align, node);
- if (m)
- *m = size;
+ if (!m)
+ return NULL;
+ *m = size;
return (void *)m + align;
} else {
void *ret;
return (void *)m + align;
} else {
void *ret;
@@
-513,28
+514,28
@@
size_t ksize(const void *block)
return 0;
sp = (struct slob_page *)virt_to_page(block);
return 0;
sp = (struct slob_page *)virt_to_page(block);
- if (slob_page(sp))
- return ((slob_t *)block - 1)->units + SLOB_UNIT;
- else
+ if (slob_page(sp)) {
+ int align = max(ARCH_KMALLOC_MINALIGN, ARCH_SLAB_MINALIGN);
+ unsigned int *m = (unsigned int *)(block - align);
+ return SLOB_UNITS(*m) * SLOB_UNIT;
+ } else
return sp->page.private;
}
return sp->page.private;
}
-EXPORT_SYMBOL(ksize);
struct kmem_cache {
unsigned int size, align;
unsigned long flags;
const char *name;
struct kmem_cache {
unsigned int size, align;
unsigned long flags;
const char *name;
- void (*ctor)(
struct kmem_cache *,
void *);
+ void (*ctor)(void *);
};
struct kmem_cache *kmem_cache_create(const char *name, size_t size,
};
struct kmem_cache *kmem_cache_create(const char *name, size_t size,
- size_t align, unsigned long flags,
- void (*ctor)(struct kmem_cache *, void *))
+ size_t align, unsigned long flags, void (*ctor)(void *))
{
struct kmem_cache *c;
c = slob_alloc(sizeof(struct kmem_cache),
{
struct kmem_cache *c;
c = slob_alloc(sizeof(struct kmem_cache),
-
flags
, ARCH_KMALLOC_MINALIGN, -1);
+
GFP_KERNEL
, ARCH_KMALLOC_MINALIGN, -1);
if (c) {
c->name = name;
if (c) {
c->name = name;
@@
-574,7
+575,7
@@
void *kmem_cache_alloc_node(struct kmem_cache *c, gfp_t flags, int node)
b = slob_new_page(flags, get_order(c->size), node);
if (c->ctor)
b = slob_new_page(flags, get_order(c->size), node);
if (c->ctor)
- c->ctor(
c,
b);
+ c->ctor(b);
return b;
}
return b;
}