git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] 32bit integer overflow in invalidate_inode_pages2()
[pandora-kernel.git]
/
mm
/
mempool.c
diff --git
a/mm/mempool.c
b/mm/mempool.c
index
c9f3d46
..
1a99b80
100644
(file)
--- a/
mm/mempool.c
+++ b/
mm/mempool.c
@@
-51,16
+51,23
@@
static void free_pool(mempool_t *pool)
* functions might sleep - as long as the mempool_alloc function is not called
* from IRQ contexts.
*/
* functions might sleep - as long as the mempool_alloc function is not called
* from IRQ contexts.
*/
-mempool_t *
mempool_create(int min_nr, mempool_alloc_t *alloc_fn,
+mempool_t *mempool_create(int min_nr, mempool_alloc_t *alloc_fn,
mempool_free_t *free_fn, void *pool_data)
{
mempool_free_t *free_fn, void *pool_data)
{
- mempool_t *pool;
+ return mempool_create_node(min_nr,alloc_fn,free_fn, pool_data,-1);
+}
+EXPORT_SYMBOL(mempool_create);
- pool = kmalloc(sizeof(*pool), GFP_KERNEL);
+mempool_t *mempool_create_node(int min_nr, mempool_alloc_t *alloc_fn,
+ mempool_free_t *free_fn, void *pool_data, int node_id)
+{
+ mempool_t *pool;
+ pool = kmalloc_node(sizeof(*pool), GFP_KERNEL, node_id);
if (!pool)
return NULL;
memset(pool, 0, sizeof(*pool));
if (!pool)
return NULL;
memset(pool, 0, sizeof(*pool));
- pool->elements = kmalloc(min_nr * sizeof(void *), GFP_KERNEL);
+ pool->elements = kmalloc_node(min_nr * sizeof(void *),
+ GFP_KERNEL, node_id);
if (!pool->elements) {
kfree(pool);
return NULL;
if (!pool->elements) {
kfree(pool);
return NULL;
@@
-87,7
+94,7
@@
mempool_t * mempool_create(int min_nr, mempool_alloc_t *alloc_fn,
}
return pool;
}
}
return pool;
}
-EXPORT_SYMBOL(mempool_create);
+EXPORT_SYMBOL(mempool_create
_node
);
/**
* mempool_resize - resize an existing memory pool
/**
* mempool_resize - resize an existing memory pool
@@
-105,7
+112,7
@@
EXPORT_SYMBOL(mempool_create);
* while this function is running. mempool_alloc() & mempool_free()
* might be called (eg. from IRQ contexts) while this function executes.
*/
* while this function is running. mempool_alloc() & mempool_free()
* might be called (eg. from IRQ contexts) while this function executes.
*/
-int mempool_resize(mempool_t *pool, int new_min_nr,
unsigned int __nocas
t gfp_mask)
+int mempool_resize(mempool_t *pool, int new_min_nr,
gfp_
t gfp_mask)
{
void *element;
void **new_elements;
{
void *element;
void **new_elements;
@@
-193,12
+200,12
@@
EXPORT_SYMBOL(mempool_destroy);
* *never* fails when called from process contexts. (it might
* fail if called from an IRQ context.)
*/
* *never* fails when called from process contexts. (it might
* fail if called from an IRQ context.)
*/
-void * mempool_alloc(mempool_t *pool,
unsigned int __nocas
t gfp_mask)
+void * mempool_alloc(mempool_t *pool,
gfp_
t gfp_mask)
{
void *element;
unsigned long flags;
{
void *element;
unsigned long flags;
-
DEFINE_WAIT(wait)
;
-
in
t gfp_temp;
+
wait_queue_t wait
;
+
gfp_
t gfp_temp;
might_sleep_if(gfp_mask & __GFP_WAIT);
might_sleep_if(gfp_mask & __GFP_WAIT);
@@
-228,6
+235,7
@@
repeat_alloc:
/* Now start performing page reclaim */
gfp_temp = gfp_mask;
/* Now start performing page reclaim */
gfp_temp = gfp_mask;
+ init_wait(&wait);
prepare_to_wait(&pool->wait, &wait, TASK_UNINTERRUPTIBLE);
smp_mb();
if (!pool->curr_nr)
prepare_to_wait(&pool->wait, &wait, TASK_UNINTERRUPTIBLE);
smp_mb();
if (!pool->curr_nr)
@@
-268,7
+276,7
@@
EXPORT_SYMBOL(mempool_free);
/*
* A commonly used alloc and free fn.
*/
/*
* A commonly used alloc and free fn.
*/
-void *mempool_alloc_slab(
unsigned int __nocas
t gfp_mask, void *pool_data)
+void *mempool_alloc_slab(
gfp_
t gfp_mask, void *pool_data)
{
kmem_cache_t *mem = (kmem_cache_t *) pool_data;
return kmem_cache_alloc(mem, gfp_mask);
{
kmem_cache_t *mem = (kmem_cache_t *) pool_data;
return kmem_cache_alloc(mem, gfp_mask);