Re: [PATCH v3] erofs: cap LZMA stream pool size

Guenter Roeck <[email protected]>
Newsgroups org.ozlabs.lists.linux-erofs,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
On 8/11/26 12:27, Geert Uytterhoeven wrote:
> On Mon, 3 Aug 2026 at 11:12, Uwe Kleine-König
> <[email protected]> wrote:
>> On Mon, Aug 03, 2026 at 10:09:06AM +0200, Geert Uytterhoeven wrote:
>>> On Tue, 28 Jul 2026 at 08:55, SJ Park <[email protected]> wrote:
>>>> I don't have a m68k testfarm, either.  I'm doing crossbuild [1].  Hopefully you
>>>> could also reproduce it.
>>
>> FTR, I don't have m68k hardware either, but as this is a build time
>> failure installing the Debian package gcc-m68k-linux-gnu and then doing
>> builds using
>>
>>          make ARCH=m68k CROSS_COMPILE=m68k-linux-gnu-
>>
>> is good enough to reproduce the failure.
>>
>>> I think you can reproduce some of the issues on most architectures
>>> with a non-SMP kernel, cfr. my reply[1] to Uwe's proposed fix.
>>> Unfortunately the Kconfig warning only shows up on architectures that
>>> don't define NR_CPUS (because they do not support SMP) at all,
>>> while ending up with zero streams is probably a runtime failure.
>>>
>>> [1] https://lore.kernel.org/CAMuHMdVGKX=3cfOrLWp1uSHX76xf1-=C0+GVCXkA8JTqNPg-ew@mail.gmail.com
>>
>> I guess EROFS_FS_ZIP_LZMA_DEFAULT_MAX_STREAMS should depend on SMP and
>> it's use should be conditionalized using something like
>>
>> diff --git a/fs/erofs/decompressor_lzma.c b/fs/erofs/decompressor_lzma.c
>> index 6b0cdb446c6a..c00e94f8206f 100644
>> --- a/fs/erofs/decompressor_lzma.c
>> +++ b/fs/erofs/decompressor_lzma.c
>> @@ -50,9 +50,13 @@ static int __init z_erofs_lzma_init(void)
>>          unsigned int i;
>>
>>          /* by default, use # of possible CPUs instead */
>> -       if (!z_erofs_lzma_nstrms)
>> -               z_erofs_lzma_nstrms = min_t(unsigned int, num_possible_cpus(),
>> -                               CONFIG_EROFS_FS_ZIP_LZMA_DEFAULT_MAX_STREAMS);
>> +       if (!z_erofs_lzma_nstrms) {
>> +               if (IS_ENABLED(CONFIG_SMP))
>> +                       z_erofs_lzma_nstrms = min_t(unsigned int, num_possible_cpus(),
>> +                                       CONFIG_EROFS_FS_ZIP_LZMA_DEFAULT_MAX_STREAMS);
>> +               else
>> +                       z_erofs_lzma_nstrms = 1;
>> +       }
>>
>>          for (i = 0; i < z_erofs_lzma_nstrms; ++i) {
>>                  struct z_erofs_lzma *strm = kzalloc_obj(*strm);
> 
> LGTM.
> 
>>
>> I played a bit with the definition of
>> EROFS_FS_ZIP_LZMA_DEFAULT_MAX_STREAMS in fs/erofs/Kconfig, but didn't
>> find a way to define it that both uses NR_CPUS and doesn't generate a
>> warning with ARCH=m68k.
> 
> Any progress with fixing this for v7.2?
> 
> NR_CPUS depends on SMP on most architectures, so you get e.g.
> with ARCH=arm allmodconfig + CONFIG_SMP=n:
> 
>      CONFIG_EROFS_FS_ZIP_LZMA_DEFAULT_MAX_STREAMS=0
> 
> X86 defines NR_CPUS unconditionally, so there it works as expected.
> Thanks!
> 
FWIW, m68k:allmodconfig now fails to build due to this problem all the
way back to v6.6.y.

Guenter
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.