Re: [linux-next:master] BUILD REGRESSION 8cb8311e95e3bb58bd84d6350365f14a718faa6d

Matthew Wilcox <[email protected]>
Newsgroups gmane.comp.emulators.kvm.devel,gmane.linux.kernel.virtualization,gmane.linux.network,gmane.linux.ports.riscv,gmane.linux.drivers.rdma,gmane.linux.kernel.pci,gmane.linux.parport,gmane.linux.ports.arm.omap,gmane.linux.kernel.mm,gmane.linux.ports.arm.kernel,gmane.comp.video.dri.devel,gmane.linux.kernel.bpf,gmane.comp.freedesktop.amd-gfx,gmane.linux.alsa.devel
Message-ID <[email protected]>
On Thu, May 26, 2022 at 11:48:32AM +0300, Dan Carpenter wrote:
> On Thu, May 26, 2022 at 02:16:34AM +0100, Matthew Wilcox wrote:
> > Bizarre this started showing up now.  The recent patch was:
> > 
> > -       info->alloced += compound_nr(page);
> > -       inode->i_blocks += BLOCKS_PER_PAGE << compound_order(page);
> > +       info->alloced += folio_nr_pages(folio);
> > +       inode->i_blocks += BLOCKS_PER_PAGE << folio_order(folio);
> > 
> > so it could tell that compound_order() was small, but folio_order()
> > might be large?
> 
> The old code also generates a warning on my test system.  Smatch thinks
> both compound_order() and folio_order() are 0-255.  I guess because of
> the "unsigned char compound_order;" in the struct page.

It'd be nice if we could annotate that as "contains a value between
1 and BITS_PER_LONG - PAGE_SHIFT".  Then be able to optionally enable
a checker that ensures that's true on loads/stores.  Maybe we need a
language that isn't C :-P  Ada can do this ... I don't think Rust can.
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.