The patch titled Subject: zram: add pool_page_order device attribute has been added to the -mm mm-unstable branch. Its filename is zram-add-pool_page_order-device-attribute.patch This patch will shortly appear at https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/zram-add-pool_page_order-device-attribute.patch This patch will later appear in the mm-unstable branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next via the mm-everything branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm and is updated there every 2-3 working days ------------------------------------------------------ From: Sergey Senozhatsky <senozhatsky@xxxxxxxxxxxx> Subject: zram: add pool_page_order device attribute Date: Tue, 25 Oct 2022 01:12:10 +0900 Add a new sysfs knob that allows user-space to set zsmalloc page order value on per-device basis. Link: https://lkml.kernel.org/r/20221024161213.3221725-4-senozhatsky@xxxxxxxxxxxx Signed-off-by: Sergey Senozhatsky <senozhatsky@xxxxxxxxxxxx> Cc: Minchan Kim <minchan@xxxxxxxxxx> Cc: Nitin Gupta <ngupta@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- drivers/block/zram/zram_drv.c | 43 +++++++++++++++++++++++++++++++- drivers/block/zram/zram_drv.h | 2 + 2 files changed, 44 insertions(+), 1 deletion(-) --- a/drivers/block/zram/zram_drv.c~zram-add-pool_page_order-device-attribute +++ a/drivers/block/zram/zram_drv.c @@ -1186,6 +1186,44 @@ static ssize_t mm_stat_show(struct devic return ret; } +static ssize_t pool_page_order_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + u32 val; + struct zram *zram = dev_to_zram(dev); + + down_read(&zram->init_lock); + val = zram->pool_page_order; + up_read(&zram->init_lock); + + return scnprintf(buf, PAGE_SIZE, "%d\n", val); +} + +static ssize_t pool_page_order_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + struct zram *zram = dev_to_zram(dev); + u32 val; + + if (kstrtou32(buf, 10, &val)) + return -EINVAL; + + if (val < ZS_MIN_PAGE_ORDER || val > ZS_MAX_PAGE_ORDER) + return -EINVAL; + + down_read(&zram->init_lock); + if (init_done(zram)) { + up_read(&zram->init_lock); + return -EINVAL; + } + + zram->pool_page_order = val; + up_read(&zram->init_lock); + + return len; +} + #ifdef CONFIG_ZRAM_WRITEBACK #define FOUR_K(x) ((x) * (1 << (PAGE_SHIFT - 12))) static ssize_t bd_stat_show(struct device *dev, @@ -1254,7 +1292,7 @@ static bool zram_meta_alloc(struct zram return false; zram->mem_pool = zs_create_pool(zram->disk->disk_name, - ZS_DEFAULT_PAGE_ORDER); + zram->pool_page_order); if (!zram->mem_pool) { vfree(zram->table); return false; @@ -2176,6 +2214,7 @@ static DEVICE_ATTR_RW(writeback_limit_en static DEVICE_ATTR_RW(recomp_algorithm); static DEVICE_ATTR_WO(recompress); #endif +static DEVICE_ATTR_RW(pool_page_order); static struct attribute *zram_disk_attrs[] = { &dev_attr_disksize.attr, @@ -2203,6 +2242,7 @@ static struct attribute *zram_disk_attrs &dev_attr_recomp_algorithm.attr, &dev_attr_recompress.attr, #endif + &dev_attr_pool_page_order.attr, NULL, }; @@ -2240,6 +2280,7 @@ static int zram_add(void) goto out_free_idr; } + zram->pool_page_order = ZS_DEFAULT_PAGE_ORDER; zram->disk->major = zram_major; zram->disk->first_minor = device_id; zram->disk->minors = 1; --- a/drivers/block/zram/zram_drv.h~zram-add-pool_page_order-device-attribute +++ a/drivers/block/zram/zram_drv.h @@ -120,6 +120,8 @@ struct zram { */ u64 disksize; /* bytes */ const char *comp_algs[ZRAM_MAX_ZCOMPS]; + + u32 pool_page_order; /* * zram is claimed so open request will be failed */ _ Patches currently in -mm which might be from senozhatsky@xxxxxxxxxxxx are zram-preparation-for-multi-zcomp-support.patch zram-add-recompression-algorithm-sysfs-knob.patch zram-factor-out-wb-and-non-wb-zram-read-functions.patch zram-introduce-recompress-sysfs-knob.patch documentation-add-recompression-documentation.patch zram-add-recompression-algorithm-choice-to-kconfig.patch zram-add-recompress-flag-to-read_block_state.patch zram-clarify-writeback_store-comment.patch zram-use-is_err_value-to-check-for-zs_malloc-errors.patch zsmalloc-turn-zspage-order-into-runtime-variable.patch zsmalloc-zram-pass-zspage-order-to-zs_create_pool.patch zram-add-pool_page_order-device-attribute.patch documentation-document-zram-pool_page_order-attribute.patch zsmalloc-break-out-of-loop-when-found-perfect-zspage-order.patch zsmalloc-make-sure-we-select-best-zspage-size.patch