Re: [PATCH v2 3/5] zstd: move ZSTD_MAX_CLEVEL to zstd_lib.h
haoqin huang <[email protected]> Wed, 29 Jul 2026 12:32:40 +0800
| Newsgroups | org.kernel.vger.linux-block,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CAEjiKSmLSrfbtBukdC+fRqDY0tOVnyPtnxBEUyhrvrrwLbaxMA@mail.gmail.com> |
On Wed, Jul 29, 2026 at 12:23 PM Sergey Senozhatsky <[email protected]> wrote: > > On (26/07/29 12:16), haoqin huang wrote: > > > On (26/07/28 17:29), Haoqin Huang wrote: > > > [..] > > > > #define ZSTD_MINMATCH_MAX 7 /* only for ZSTD_fast, other strategies are limited to 6 */ > > > > #define ZSTD_MINMATCH_MIN 3 /* only for ZSTD_btopt+, faster strategies are limited to 4 */ > > > > +#define ZSTD_MAX_CLEVEL 22 > > > > #define ZSTD_TARGETLENGTH_MAX ZSTD_BLOCKSIZE_MAX > > > > #define ZSTD_TARGETLENGTH_MIN 0 /* note : comparing this constant to an unsigned results in a tautological test */ > > > > #define ZSTD_STRATEGY_MIN ZSTD_fast > > > > diff --git a/lib/zstd/compress/clevels.h b/lib/zstd/compress/clevels.h > > > > index 6ab8be6532ef..06565e064456 100644 > > > > --- a/lib/zstd/compress/clevels.h > > > > +++ b/lib/zstd/compress/clevels.h > > > > @@ -17,8 +17,6 @@ > > > > > > > > /*-===== Pre-defined compression levels =====-*/ > > > > > > > > -#define ZSTD_MAX_CLEVEL 22 > > > > - > > > > __attribute__((__unused__)) > > > > > > Sashiko made a good point. Can we use zstd_max_clevel() instead? > > > > Good point, I'll drop this patch and use zstd_max_clevel() instead > > in v3. > > > > Since it's a runtime function and can't be used for static struct > > initialization, I plan to set backend_zstd's level_max to -1 as a > > sentinel value, and query the actual maximum in > > zcomp_validate_params(): > > > > s32 max = backend->level_max; > > if (max < 0) > > max = zstd_max_clevel(); > > > > Do you think this approach is feasible? > > Hmm, no, that doesn't look good. zcomp should not include > zstd.h or any other libs directly. Should params validation > be a per-backend callback then? Good point, zcomp.c shouldn't include library headers. A per-backend callback would be cleaner. I'll add an optional validate_params to zcomp_ops: the zstd backend implements it using zstd_max_clevel() internally, while lzo/deflate and others just rely on the static caps check (no callback needed). zcomp.c stays free of any library headers. I'll send this in v3.