All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hugh Dickins <hughd@google.com>
To: Hugh Dickins <hughd@google.com>
Cc: Minchan Kim <minchan@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	"Kirill A. Shutemov" <kirill@shutemov.name>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Rik van Riel <riel@redhat.com>, Mel Gorman <mgorman@suse.de>,
	Michal Hocko <mhocko@suse.cz>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Vlastimil Babka <vbabka@suse.cz>
Subject: Re: kernel oops on mmotm-2015-10-15-15-20
Date: Wed, 21 Oct 2015 21:25:26 -0700 (PDT)	[thread overview]
Message-ID: <alpine.LSU.2.11.1510212052330.1094@eggly.anvils> (raw)
In-Reply-To: <alpine.LSU.2.11.1510211908300.2949@eggly.anvils>

On Wed, 21 Oct 2015, Hugh Dickins wrote:
> On Thu, 22 Oct 2015, Minchan Kim wrote:
> > Hello Hugh,
> > 
> > On Wed, Oct 21, 2015 at 05:59:59PM -0700, Hugh Dickins wrote:
> > > On Thu, 22 Oct 2015, Minchan Kim wrote:
> > > > 
> > > > I added the code to check it and queued it again but I had another oops
> > > > in this time but symptom is related to anon_vma, too.
> > > > (kernel is based on recent mmotm + unconditional mkdirty for bug fix)
> > > > It seems page_get_anon_vma returns NULL since the page was not page_mapped
> > > > at that time but second check of page_mapped right before try_to_unmap seems
> > > > to be true.
> > > > 
> > > > Adding 4191228k swap on /dev/vda5.  Priority:-1 extents:1 across:4191228k FS
> > > > Adding 4191228k swap on /dev/vda5.  Priority:-1 extents:1 across:4191228k FS
> > > > page:ffffea0001cfbfc0 count:3 mapcount:1 mapping:ffff88007f1b5f51 index:0x600000aff
> > > > flags: 0x4000000000048019(locked|uptodate|dirty|swapcache|swapbacked)
> > > > page dumped because: VM_BUG_ON_PAGE(PageAnon(page) && !PageKsm(page) && !anon_vma)
> > > 
> > > That's interesting, that's one I added in my page migration series.
> > > Let me think on it, but it could well relate to the one you got before.

I think I have introduced a bug there; or rather, made more evident
a pre-existing bug.  But I'm not sure yet: the stacktrace was from
compaction (called by khugepaged, but that may not be relevant at all),
and thinking through the races with isolate_migratepages_block() is
never easy.

What's certain is that I was not giving any thought to
isolate_migratepages_block() when I added that VM_BUG_ON_PAGE():
I was thinking about "stable" anonymous pages, and how they get
faulted back in from swapcache while holding page lock.

It looks to me now as if a page might not yet be PageAnon when it's
first tested in __unmap_and_move(), when going to page_get_anon_vma();
but is page_mapped() and PageAnon() by time of calling try_to_unmap(),
where I inserted the VM_BUG_ON_PAGE().

If so, the code would always have been wrong (trying to unmap the
anonymous page, and later remap its replacement, without a hold on
the anon_vma needed to guide both lookups); but I'll have made it
more glaringly wrong with the VM_BUG_ON_PAGE() - let me pretend
that's a good step forward :)

There's a reference count check in isolated_migratepages_block()
before this, which would make it unlikely, but I doubt rules it out.

However... you did hit an anon_vma reference counting problem before
my migration changes went in, and Kirill had a vague suspicion that
he might be screwing up anon_vma refcounting in split_huge_page():
if he confirms that, I'd say it's more likely to be the cause of
your crash on this occasion.

Not hard to fix mine (though we'll probably have to lose the
VM_BUG_ON_PAGE on the way, so the real fix will be hidden by that
trivial fix), I just want to give the races more thought.

However it turns out, I think you have a very useful test there.

(And I've observed no PageDirty problems with your recent patchsets,
though I don't use MADV_FREE at all myself.)

Hugh

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Hugh Dickins <hughd@google.com>
To: Hugh Dickins <hughd@google.com>
Cc: Minchan Kim <minchan@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	"Kirill A. Shutemov" <kirill@shutemov.name>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Rik van Riel <riel@redhat.com>, Mel Gorman <mgorman@suse.de>,
	Michal Hocko <mhocko@suse.cz>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Vlastimil Babka <vbabka@suse.cz>
Subject: Re: kernel oops on mmotm-2015-10-15-15-20
Date: Wed, 21 Oct 2015 21:25:26 -0700 (PDT)	[thread overview]
Message-ID: <alpine.LSU.2.11.1510212052330.1094@eggly.anvils> (raw)
In-Reply-To: <alpine.LSU.2.11.1510211908300.2949@eggly.anvils>

On Wed, 21 Oct 2015, Hugh Dickins wrote:
> On Thu, 22 Oct 2015, Minchan Kim wrote:
> > Hello Hugh,
> > 
> > On Wed, Oct 21, 2015 at 05:59:59PM -0700, Hugh Dickins wrote:
> > > On Thu, 22 Oct 2015, Minchan Kim wrote:
> > > > 
> > > > I added the code to check it and queued it again but I had another oops
> > > > in this time but symptom is related to anon_vma, too.
> > > > (kernel is based on recent mmotm + unconditional mkdirty for bug fix)
> > > > It seems page_get_anon_vma returns NULL since the page was not page_mapped
> > > > at that time but second check of page_mapped right before try_to_unmap seems
> > > > to be true.
> > > > 
> > > > Adding 4191228k swap on /dev/vda5.  Priority:-1 extents:1 across:4191228k FS
> > > > Adding 4191228k swap on /dev/vda5.  Priority:-1 extents:1 across:4191228k FS
> > > > page:ffffea0001cfbfc0 count:3 mapcount:1 mapping:ffff88007f1b5f51 index:0x600000aff
> > > > flags: 0x4000000000048019(locked|uptodate|dirty|swapcache|swapbacked)
> > > > page dumped because: VM_BUG_ON_PAGE(PageAnon(page) && !PageKsm(page) && !anon_vma)
> > > 
> > > That's interesting, that's one I added in my page migration series.
> > > Let me think on it, but it could well relate to the one you got before.

I think I have introduced a bug there; or rather, made more evident
a pre-existing bug.  But I'm not sure yet: the stacktrace was from
compaction (called by khugepaged, but that may not be relevant at all),
and thinking through the races with isolate_migratepages_block() is
never easy.

What's certain is that I was not giving any thought to
isolate_migratepages_block() when I added that VM_BUG_ON_PAGE():
I was thinking about "stable" anonymous pages, and how they get
faulted back in from swapcache while holding page lock.

It looks to me now as if a page might not yet be PageAnon when it's
first tested in __unmap_and_move(), when going to page_get_anon_vma();
but is page_mapped() and PageAnon() by time of calling try_to_unmap(),
where I inserted the VM_BUG_ON_PAGE().

If so, the code would always have been wrong (trying to unmap the
anonymous page, and later remap its replacement, without a hold on
the anon_vma needed to guide both lookups); but I'll have made it
more glaringly wrong with the VM_BUG_ON_PAGE() - let me pretend
that's a good step forward :)

There's a reference count check in isolated_migratepages_block()
before this, which would make it unlikely, but I doubt rules it out.

However... you did hit an anon_vma reference counting problem before
my migration changes went in, and Kirill had a vague suspicion that
he might be screwing up anon_vma refcounting in split_huge_page():
if he confirms that, I'd say it's more likely to be the cause of
your crash on this occasion.

Not hard to fix mine (though we'll probably have to lose the
VM_BUG_ON_PAGE on the way, so the real fix will be hidden by that
trivial fix), I just want to give the races more thought.

However it turns out, I think you have a very useful test there.

(And I've observed no PageDirty problems with your recent patchsets,
though I don't use MADV_FREE at all myself.)

Hugh

  reply	other threads:[~2015-10-22  4:25 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-21  5:28 kernel oops on mmotm-2015-10-15-15-20 Minchan Kim
2015-10-21  5:28 ` Minchan Kim
2015-10-21 11:07 ` Kirill A. Shutemov
2015-10-21 11:07   ` Kirill A. Shutemov
2015-10-22  0:06   ` Minchan Kim
2015-10-22  0:06     ` Minchan Kim
2015-10-22  0:59     ` Hugh Dickins
2015-10-22  0:59       ` Hugh Dickins
2015-10-22  1:21       ` Minchan Kim
2015-10-22  1:21         ` Minchan Kim
2015-10-22  9:00         ` Minchan Kim
2015-10-29  0:25           ` Kirill A. Shutemov
2015-10-29  0:25             ` Kirill A. Shutemov
2015-10-29  7:58             ` Minchan Kim
2015-10-29  7:58               ` Minchan Kim
2015-10-29  9:43               ` Kirill A. Shutemov
2015-10-29  9:43                 ` Kirill A. Shutemov
2015-10-29  9:52               ` Kirill A. Shutemov
2015-10-29  9:52                 ` Kirill A. Shutemov
2015-10-30  7:03                 ` Minchan Kim
2015-10-30  7:03                   ` Minchan Kim
2015-11-02 12:57                   ` Kirill A. Shutemov
2015-11-02 12:57                     ` Kirill A. Shutemov
2015-11-03  3:02                     ` Minchan Kim
2015-11-03  3:02                       ` Minchan Kim
2015-11-03  7:16                       ` Kirill A. Shutemov
2015-11-03  7:16                         ` Kirill A. Shutemov
2015-11-03  7:33                         ` Minchan Kim
2015-11-03  7:33                           ` Minchan Kim
2015-11-03 15:20                           ` Minchan Kim
2015-11-03 15:20                             ` Minchan Kim
2015-11-04 14:21                             ` Kirill A. Shutemov
2015-11-04 14:21                               ` Kirill A. Shutemov
2015-11-05  0:19                               ` Minchan Kim
2015-11-05  0:19                                 ` Minchan Kim
2015-11-08 22:55                                 ` Kirill A. Shutemov
2015-11-08 22:55                                   ` Kirill A. Shutemov
2015-11-12  0:36                                   ` Minchan Kim
2015-11-12  0:36                                     ` Minchan Kim
2015-11-16  1:45                                     ` Minchan Kim
2015-11-16  1:45                                       ` Minchan Kim
2015-11-16  8:45                                       ` Kirill A. Shutemov
2015-11-16  8:45                                         ` Kirill A. Shutemov
2015-11-16 10:32                                         ` Minchan Kim
2015-11-16 10:32                                           ` Minchan Kim
2015-11-16 10:54                                           ` Kirill A. Shutemov
2015-11-16 10:54                                             ` Kirill A. Shutemov
2015-11-17  7:35                                             ` Minchan Kim
2015-11-17  7:35                                               ` Minchan Kim
2015-11-17  9:32                                               ` Kirill A. Shutemov
2015-11-17  9:32                                                 ` Kirill A. Shutemov
2015-11-19  2:12                                                 ` Minchan Kim
2015-11-19  2:12                                                   ` Minchan Kim
2015-11-19  6:58                                                   ` Kirill A. Shutemov
2015-11-19  6:58                                                     ` Kirill A. Shutemov
2015-11-19 10:10                                                     ` yalin wang
2015-11-19 10:10                                                       ` yalin wang
2015-11-25  7:21                                                     ` Minchan Kim
2015-11-25  7:21                                                       ` Minchan Kim
2015-10-22  2:15 ` Hugh Dickins
2015-10-22  2:15   ` Hugh Dickins
2015-10-22  4:25   ` Hugh Dickins [this message]
2015-10-22  4:25     ` Hugh Dickins
2015-10-22 22:26     ` Hugh Dickins
2015-10-22 22:26       ` Hugh Dickins

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.LSU.2.11.1510212052330.1094@eggly.anvils \
    --to=hughd@google.com \
    --cc=akpm@linux-foundation.org \
    --cc=hannes@cmpxchg.org \
    --cc=kirill@shutemov.name \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@suse.de \
    --cc=mhocko@suse.cz \
    --cc=minchan@kernel.org \
    --cc=riel@redhat.com \
    --cc=vbabka@suse.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.