mirror of
https://github.com/torvalds/linux.git
synced 2026-07-30 11:11:26 +02:00
zram: limit max recompress prio to num_active_comps
Use the actual number of algorithms zram was configure with instead of theoretical limit of ZRAM_MAX_COMPS. Also make sure that min prio is not above max prio. Link: https://lkml.kernel.org/r/20250303022425.285971-9-senozhatsky@chromium.org Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org> Cc: Hillf Danton <hdanton@sina.com> Cc: Kairui Song <ryncsn@gmail.com> Cc: Minchan Kim <minchan@kernel.org> Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Cc: Yosry Ahmed <yosry.ahmed@linux.dev> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
f3b0c6c899
commit
d7fdc5a620
|
|
@ -2027,16 +2027,19 @@ static ssize_t recompress_store(struct device *dev,
|
|||
struct device_attribute *attr,
|
||||
const char *buf, size_t len)
|
||||
{
|
||||
u32 prio = ZRAM_SECONDARY_COMP, prio_max = ZRAM_MAX_COMPS;
|
||||
struct zram *zram = dev_to_zram(dev);
|
||||
char *args, *param, *val, *algo = NULL;
|
||||
u64 num_recomp_pages = ULLONG_MAX;
|
||||
struct zram_pp_ctl *ctl = NULL;
|
||||
struct zram_pp_slot *pps;
|
||||
u32 mode = 0, threshold = 0;
|
||||
u32 prio, prio_max;
|
||||
struct page *page;
|
||||
ssize_t ret;
|
||||
|
||||
prio = ZRAM_SECONDARY_COMP;
|
||||
prio_max = zram->num_active_comps;
|
||||
|
||||
args = skip_spaces(buf);
|
||||
while (*args) {
|
||||
args = next_arg(args, ¶m, &val);
|
||||
|
|
@ -2089,7 +2092,7 @@ static ssize_t recompress_store(struct device *dev,
|
|||
if (prio == ZRAM_PRIMARY_COMP)
|
||||
prio = ZRAM_SECONDARY_COMP;
|
||||
|
||||
prio_max = min(prio + 1, ZRAM_MAX_COMPS);
|
||||
prio_max = prio + 1;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
@ -2117,7 +2120,7 @@ static ssize_t recompress_store(struct device *dev,
|
|||
continue;
|
||||
|
||||
if (!strcmp(zram->comp_algs[prio], algo)) {
|
||||
prio_max = min(prio + 1, ZRAM_MAX_COMPS);
|
||||
prio_max = prio + 1;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
|
|
@ -2129,6 +2132,12 @@ static ssize_t recompress_store(struct device *dev,
|
|||
}
|
||||
}
|
||||
|
||||
prio_max = min(prio_max, (u32)zram->num_active_comps);
|
||||
if (prio >= prio_max) {
|
||||
ret = -EINVAL;
|
||||
goto release_init_lock;
|
||||
}
|
||||
|
||||
page = alloc_page(GFP_KERNEL);
|
||||
if (!page) {
|
||||
ret = -ENOMEM;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user