On Wed, Jun 5, 2019 at 3:06 AM Hui Zhu <teawaterz@xxxxxxxxxxxxxxxxx> wrote: > > As a zpool_driver, zsmalloc can allocate movable memory because it > support migate pages. > But zbud and z3fold cannot allocate movable memory. > > This commit adds 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. > > Signed-off-by: Hui Zhu <teawaterz@xxxxxxxxxxxxxxxxx> Reviewed-by: Shakeel Butt <shakeelb@xxxxxxxxxx> IMHO no need to block this series on z3fold query. > --- > include/linux/zpool.h | 3 +++ > mm/zpool.c | 16 ++++++++++++++++ > mm/zsmalloc.c | 19 ++++++++++--------- > 3 files changed, 29 insertions(+), 9 deletions(-) > > diff --git a/include/linux/zpool.h b/include/linux/zpool.h > index 7238865e75b0..51bf43076165 100644 > --- a/include/linux/zpool.h > +++ b/include/linux/zpool.h > @@ -46,6 +46,8 @@ const char *zpool_get_type(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, > unsigned long *handle); > > @@ -90,6 +92,7 @@ struct zpool_driver { > struct zpool *zpool); > void (*destroy)(void *pool); > > + bool malloc_support_movable; > int (*malloc)(void *pool, size_t size, gfp_t gfp, > unsigned long *handle); > void (*free)(void *pool, unsigned long handle); > diff --git a/mm/zpool.c b/mm/zpool.c > index a2dd9107857d..863669212070 100644 > --- a/mm/zpool.c > +++ b/mm/zpool.c > @@ -238,6 +238,22 @@ const char *zpool_get_type(struct zpool *zpool) > 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: The zpool to allocate from. > diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c > index 0787d33b80d8..8f3d9a4d46f4 100644 > --- a/mm/zsmalloc.c > +++ b/mm/zsmalloc.c > @@ -437,15 +437,16 @@ static u64 zs_zpool_total_size(void *pool) > } > > static struct zpool_driver zs_zpool_driver = { > - .type = "zsmalloc", > - .owner = THIS_MODULE, > - .create = zs_zpool_create, > - .destroy = zs_zpool_destroy, > - .malloc = zs_zpool_malloc, > - .free = zs_zpool_free, > - .map = zs_zpool_map, > - .unmap = zs_zpool_unmap, > - .total_size = zs_zpool_total_size, > + .type = "zsmalloc", > + .owner = THIS_MODULE, > + .create = zs_zpool_create, > + .destroy = zs_zpool_destroy, > + .malloc_support_movable = true, > + .malloc = zs_zpool_malloc, > + .free = zs_zpool_free, > + .map = zs_zpool_map, > + .unmap = zs_zpool_unmap, > + .total_size = zs_zpool_total_size, > }; > > MODULE_ALIAS("zpool-zsmalloc"); > -- > 2.21.0 (Apple Git-120) >