mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
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:
parent
ed19b9d550
commit
5004a27edb
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user