Re: [mm 4.15-rc8] Random oopses under memory pressure.

From: Kirill A. Shutemov
Date: Fri Jan 19 2018 - 06:49:33 EST


On Fri, Jan 19, 2018 at 11:33:42AM +0100, Michal Hocko wrote:
> On Fri 19-01-18 13:02:59, Kirill A. Shutemov wrote:
> > On Thu, Jan 18, 2018 at 06:22:13PM +0100, Michal Hocko wrote:
> > > On Thu 18-01-18 18:40:26, Kirill A. Shutemov wrote:
> > > [...]
> > > > + /*
> > > > + * Make sure that pages are in the same section before doing pointer
> > > > + * arithmetics.
> > > > + */
> > > > + if (page_to_section(pvmw->page) != page_to_section(page))
> > > > + return false;
> > >
> > > OK, THPs shouldn't cross memory sections AFAIK. My brain is meltdown
> > > these days so this might be a completely stupid question. But why don't
> > > you simply compare pfns? This would be just simpler, no?
> >
> > In original code, we already had pvmw->page around and I thought it would
> > be easier to get page for the pte intead of looking for pfn for both
> > sides.
> >
> > We these changes it's no longer the case.
> >
> > Do you care enough to send a patch? :)
>
> Well, memory sections are sparsemem concept IIRC. Unless I've missed
> something page_to_section is quarded by SECTION_IN_PAGE_FLAGS and that
> is conditional to CONFIG_SPARSEMEM. THP is a generic code so using it
> there is wrong unless I miss some subtle detail here.
>
> Comparing pfn should be generic enough.

Good point.

What about something like this?