Message ID | 20190605100630.13293-1-teawaterz@linux.alibaba.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [V3,1/2] zpool: Add malloc_support_movable to zpool_driver | expand |
On Wed, Jun 5, 2019 at 3:06 AM Hui Zhu <teawaterz@linux.alibaba.com> wrote: > > As a zpool_driver, zsmalloc can allocate movable memory because it > support migate pages. > But zbud and z3fold cannot allocate movable memory. > Cc: Vitaly It seems like z3fold does support page migration but z3fold's malloc is rejecting __GFP_HIGHMEM. Vitaly, is there a reason to keep rejecting __GFP_HIGHMEM after 1f862989b04a ("mm/z3fold.c: support page migration"). thanks, Shakeel
On Wed, Jun 5, 2019 at 3:06 AM Hui Zhu <teawaterz@linux.alibaba.com> 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@linux.alibaba.com> Reviewed-by: Shakeel Butt <shakeelb@google.com> 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) >
Hi Shakeel, On Wed, Jun 5, 2019 at 6:31 PM Shakeel Butt <shakeelb@google.com> wrote: > > On Wed, Jun 5, 2019 at 3:06 AM Hui Zhu <teawaterz@linux.alibaba.com> wrote: > > > > As a zpool_driver, zsmalloc can allocate movable memory because it > > support migate pages. > > But zbud and z3fold cannot allocate movable memory. > > > > Cc: Vitaly thanks for looping me in :) > It seems like z3fold does support page migration but z3fold's malloc > is rejecting __GFP_HIGHMEM. Vitaly, is there a reason to keep > rejecting __GFP_HIGHMEM after 1f862989b04a ("mm/z3fold.c: support page > migration"). No; I don't think I see a reason to keep that part. You are very welcome to submit a patch, or otherwise I can do it when I'm done with the patches that are already in the pipeline. Thanks, Vitaly
Cc: akpm@linux-foundation.org On Wed, Jun 5, 2019 at 3:06 AM Hui Zhu <teawaterz@linux.alibaba.com> 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@linux.alibaba.com> I was wondering why this patch is not picked up by Andrew yet. You forgot to CC Andrew. Andrew, the thread starts at: http://lkml.kernel.org/r/20190605100630.13293-1-teawaterz@linux.alibaba.com > --- > 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) >
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");
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@linux.alibaba.com> --- include/linux/zpool.h | 3 +++ mm/zpool.c | 16 ++++++++++++++++ mm/zsmalloc.c | 19 ++++++++++--------- 3 files changed, 29 insertions(+), 9 deletions(-)