zpool: add malloc_support_movable to zpool_driver
As a zpool_driver, zsmalloc can allocate movable memory because it support migate pages. But zbud and z3fold cannot allocate movable memory. Add malloc_support_movable to zpool_driver. If a zpool_driver support allocate movable memory, set it to true. And add zpool_malloc_support_movable check malloc_support_movable to make sure if a zpool support allocate movable memory. Link: http://lkml.kernel.org/r/20190605100630.13293-1-teawaterz@linux.alibaba.com Signed-off-by: Hui Zhu <teawaterz@linux.alibaba.com> Reviewed-by: Shakeel Butt <shakeelb@google.com> Cc: Dan Streetman <ddstreet@ieee.org> Cc: Minchan Kim <minchan@kernel.org> Cc: Nitin Gupta <ngupta@vflare.org> Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> Cc: Seth Jennings <sjenning@redhat.com> Cc: Vitaly Wool <vitalywool@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
28eb3c8087
commit
c165f25d23
|
@ -46,6 +46,8 @@ const char *zpool_get_type(struct zpool *pool);
|
||||||
|
|
||||||
void zpool_destroy_pool(struct zpool *pool);
|
void zpool_destroy_pool(struct zpool *pool);
|
||||||
|
|
||||||
|
bool zpool_malloc_support_movable(struct zpool *pool);
|
||||||
|
|
||||||
int zpool_malloc(struct zpool *pool, size_t size, gfp_t gfp,
|
int zpool_malloc(struct zpool *pool, size_t size, gfp_t gfp,
|
||||||
unsigned long *handle);
|
unsigned long *handle);
|
||||||
|
|
||||||
|
@ -90,6 +92,7 @@ struct zpool_driver {
|
||||||
struct zpool *zpool);
|
struct zpool *zpool);
|
||||||
void (*destroy)(void *pool);
|
void (*destroy)(void *pool);
|
||||||
|
|
||||||
|
bool malloc_support_movable;
|
||||||
int (*malloc)(void *pool, size_t size, gfp_t gfp,
|
int (*malloc)(void *pool, size_t size, gfp_t gfp,
|
||||||
unsigned long *handle);
|
unsigned long *handle);
|
||||||
void (*free)(void *pool, unsigned long handle);
|
void (*free)(void *pool, unsigned long handle);
|
||||||
|
|
16
mm/zpool.c
16
mm/zpool.c
|
@ -238,6 +238,22 @@ const char *zpool_get_type(struct zpool *zpool)
|
||||||
return zpool->driver->type;
|
return zpool->driver->type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* zpool_malloc_support_movable() - Check if the zpool support
|
||||||
|
* allocate movable memory
|
||||||
|
* @zpool: The zpool to check
|
||||||
|
*
|
||||||
|
* This returns if the zpool support allocate movable memory.
|
||||||
|
*
|
||||||
|
* Implementations must guarantee this to be thread-safe.
|
||||||
|
*
|
||||||
|
* Returns: true if if the zpool support allocate movable memory, false if not
|
||||||
|
*/
|
||||||
|
bool zpool_malloc_support_movable(struct zpool *zpool)
|
||||||
|
{
|
||||||
|
return zpool->driver->malloc_support_movable;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* zpool_malloc() - Allocate memory
|
* zpool_malloc() - Allocate memory
|
||||||
* @zpool: The zpool to allocate from.
|
* @zpool: The zpool to allocate from.
|
||||||
|
|
|
@ -443,15 +443,16 @@ static u64 zs_zpool_total_size(void *pool)
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct zpool_driver zs_zpool_driver = {
|
static struct zpool_driver zs_zpool_driver = {
|
||||||
.type = "zsmalloc",
|
.type = "zsmalloc",
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.create = zs_zpool_create,
|
.create = zs_zpool_create,
|
||||||
.destroy = zs_zpool_destroy,
|
.destroy = zs_zpool_destroy,
|
||||||
.malloc = zs_zpool_malloc,
|
.malloc_support_movable = true,
|
||||||
.free = zs_zpool_free,
|
.malloc = zs_zpool_malloc,
|
||||||
.map = zs_zpool_map,
|
.free = zs_zpool_free,
|
||||||
.unmap = zs_zpool_unmap,
|
.map = zs_zpool_map,
|
||||||
.total_size = zs_zpool_total_size,
|
.unmap = zs_zpool_unmap,
|
||||||
|
.total_size = zs_zpool_total_size,
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_ALIAS("zpool-zsmalloc");
|
MODULE_ALIAS("zpool-zsmalloc");
|
||||||
|
|
Loading…
Reference in New Issue