zram: drop ->num_active_comps

It's not entirely correct to use ->num_active_comps for max-prio limit, as
->num_active_comps just tells the number of configured algorithms, not the
max configured priority.  For instance, in the following theoretical
example:

    [lz4] [nil] [nil] [deflate]

->num_active_comps is 2, while the actual max-prio is 3.

Drop ->num_active_comps and use ZRAM_MAX_COMPS instead.

Link: https://lkml.kernel.org/r/20260311084312.1766036-4-senozhatsky@chromium.org
Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Suggested-by: Minchan Kim <minchan@kernel.org>
Cc: Brian Geffon <bgeffon@google.com>
Cc: gao xu <gaoxu2@honor.com>
Cc: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Sergey Senozhatsky 2026-03-11 17:42:46 +09:00 committed by Andrew Morton
parent ed19b9d550
commit 5004a27edb
2 changed files with 16 additions and 14 deletions

View File

@ -2324,6 +2324,18 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec,
#define RECOMPRESS_IDLE (1 << 0)
#define RECOMPRESS_HUGE (1 << 1)
static bool highest_priority_algorithm(struct zram *zram, u32 prio)
{
u32 p;
for (p = prio + 1; p < ZRAM_MAX_COMPS; p++) {
if (zram->comp_algs[p])
return false;
}
return true;
}
static int scan_slots_for_recompress(struct zram *zram, u32 mode, u32 prio_max,
struct zram_pp_ctl *ctl)
{
@ -2471,12 +2483,11 @@ static int recompress_slot(struct zram *zram, u32 index, struct page *page,
* Secondary algorithms failed to re-compress the page
* in a way that would save memory.
*
* Mark the object incompressible if the max-priority
* algorithm couldn't re-compress it.
* Mark the object incompressible if the max-priority (the
* last configured one) algorithm couldn't re-compress it.
*/
if (prio < zram->num_active_comps)
return 0;
set_slot_flag(zram, index, ZRAM_INCOMPRESSIBLE);
if (highest_priority_algorithm(zram, prio))
set_slot_flag(zram, index, ZRAM_INCOMPRESSIBLE);
return 0;
}
@ -2608,12 +2619,6 @@ 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 out;
}
if (prio < ZRAM_SECONDARY_COMP || prio >= ZRAM_MAX_COMPS) {
ret = -EINVAL;
goto out;
@ -2826,7 +2831,6 @@ static void zram_destroy_comps(struct zram *zram)
if (!comp)
continue;
zcomp_destroy(comp);
zram->num_active_comps--;
}
for (prio = ZRAM_PRIMARY_COMP; prio < ZRAM_MAX_COMPS; prio++)
@ -2891,7 +2895,6 @@ static ssize_t disksize_store(struct device *dev, struct device_attribute *attr,
}
zram->comps[prio] = comp;
zram->num_active_comps++;
}
zram->disksize = disksize;
set_capacity_and_notify(zram->disk, zram->disksize >> SECTOR_SHIFT);

View File

@ -125,7 +125,6 @@ struct zram {
*/
u64 disksize; /* bytes */
const char *comp_algs[ZRAM_MAX_COMPS];
s8 num_active_comps;
/*
* zram is claimed so open request will be failed
*/