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:
Hui Zhu 2019-09-23 15:39:37 -07:00 committed by Linus Torvalds
parent 28eb3c8087
commit c165f25d23
3 changed files with 29 additions and 9 deletions

View File

@ -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);

View File

@ -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.

View File

@ -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");