From: David Hildenbrand <david@redhat.com>
To: Michal Hocko <mhocko@kernel.org>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Mel Gorman <mgorman@techsingularity.net>,
"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
Jan Kara <jack@suse.cz>, Andrea Arcangeli <aarcange@redhat.com>,
Dominik Brodowski <linux@dominikbrodowski.net>,
Matthew Wilcox <willy@infradead.org>,
Vratislav Bendel <vbendel@redhat.com>,
Rafael Aquini <aquini@redhat.com>
Subject: Re: [PATCH RFC] mm: migrate: don't rely on PageMovable() of newpage after unlocking it
Date: Mon, 28 Jan 2019 14:14:28 +0100 [thread overview]
Message-ID: <b03cae19-d02a-0ba2-69a1-010ee76748e7@redhat.com> (raw)
In-Reply-To: <20190128130709.GJ18811@dhcp22.suse.cz>
On 28.01.19 14:07, Michal Hocko wrote:
> On Mon 28-01-19 13:16:09, David Hildenbrand wrote:
> [...]
>> My theory:
>>
>> In __unmap_and_move(), we lock the old and newpage and perform the
>> migration. In case of vitio-balloon, the new page will become
>> movable, the old page will no longer be movable.
>>
>> However, after unlocking newpage, I think there is nothing stopping
>> the newpage from getting dequeued and freed by virtio-balloon. This
>> will result in the newpage
>> 1. No longer having PageMovable()
>> 2. Getting moved to the local list before finally freeing it (using
>> page->lru)
>
> Does that mean that the virtio-balloon can change the Movable state
> while there are other users of the page? Can you point to the code that
> does it? How come this can be safe at all? Or is the PageMovable stable
> only under the page lock?
>
PageMovable is stable under the lock. The relevant instructions are in
mm/balloon_compaction.c and include/linux/balloon_compaction.h
balloon_page_insert() and balloon_page_delete() modify PageMovable and
are only called with both, the page locked and b_dev_info->pages_lock
locked.
Especially:
1. balloon_page_dequeue() which tries to find an unlocked page that is
not isolated. and deletes it via balloon_page_delete().
2. balloon_page_migrate() will effectively call balloon_page_delete() on
old page and balloon_page_insert() newpage. Both pages are locked before
calling balloon_page_migrate() and the b_dev_info->pages_lock is taken
internally.
So what's left is a very small race window when migrating to a new page,
after dropping the lock of the newpage.
--
Thanks,
David / dhildenb
next prev parent reply other threads:[~2019-01-28 13:14 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-28 12:16 [PATCH RFC] mm: migrate: don't rely on PageMovable() of newpage after unlocking it David Hildenbrand
2019-01-28 13:07 ` Michal Hocko
2019-01-28 13:14 ` David Hildenbrand [this message]
2019-01-28 13:21 ` Michal Hocko
2019-01-28 13:22 ` David Hildenbrand
2019-01-28 13:35 ` Michal Hocko
2019-01-28 14:38 ` David Hildenbrand
2019-01-28 14:53 ` Michal Hocko
2019-01-28 15:01 ` Rafael Aquini
2019-01-28 15:04 ` Rafael Aquini
2019-01-28 15:13 ` David Hildenbrand
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=b03cae19-d02a-0ba2-69a1-010ee76748e7@redhat.com \
--to=david@redhat.com \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=aquini@redhat.com \
--cc=jack@suse.cz \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux@dominikbrodowski.net \
--cc=mgorman@techsingularity.net \
--cc=mhocko@kernel.org \
--cc=n-horiguchi@ah.jp.nec.com \
--cc=vbendel@redhat.com \
--cc=willy@infradead.org \
/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.