From: Vlastimil Babka <vbabka@suse.cz>
To: Hugh Dickins <hughd@google.com>,
Andrew Morton <akpm@linux-foundation.org>
Cc: Christoph Lameter <cl@linux.com>,
David Rientjes <rientjes@google.com>,
linux-mm@kvack.org
Subject: Re: [PATCH 6/12] mm: page migration use the put_new_page whenever necessary
Date: Thu, 5 Nov 2015 19:31:35 +0100 [thread overview]
Message-ID: <563BA087.1090402@suse.cz> (raw)
In-Reply-To: <alpine.LSU.2.11.1510182156010.2481@eggly.anvils>
On 10/19/2015 06:57 AM, Hugh Dickins wrote:
> I don't know of any problem from the way it's used in our current tree,
> but there is one defect in page migration's custom put_new_page feature.
>
> An unused newpage is expected to be released with the put_new_page(),
> but there was one MIGRATEPAGE_SUCCESS (0) path which released it with
> putback_lru_page(): which can be very wrong for a custom pool.
I'm a bit confused. So there's no immediate bug to be fixed but there was one in
the mainline in the past? Or elsewhere?
> Fixed more easily by resetting put_new_page once it won't be needed,
> than by adding a further flag to modify the rc test.
What is "fixed" if there is no bug? :) Maybe "Further bugs would be
prevented..." or something?
> Signed-off-by: Hugh Dickins <hughd@google.com>
I agree it's less error-prone after you patch, so:
Acked-by: Vlastimil Babka <vbabka@suse.cz>
> ---
> mm/migrate.c | 19 +++++++++++--------
> 1 file changed, 11 insertions(+), 8 deletions(-)
>
> --- migrat.orig/mm/migrate.c 2015-10-18 17:53:17.579329434 -0700
> +++ migrat/mm/migrate.c 2015-10-18 17:53:20.159332371 -0700
> @@ -938,10 +938,11 @@ static ICE_noinline int unmap_and_move(n
> int force, enum migrate_mode mode,
> enum migrate_reason reason)
> {
> - int rc = 0;
> + int rc = MIGRATEPAGE_SUCCESS;
> int *result = NULL;
> - struct page *newpage = get_new_page(page, private, &result);
> + struct page *newpage;
>
> + newpage = get_new_page(page, private, &result);
> if (!newpage)
> return -ENOMEM;
>
> @@ -955,6 +956,8 @@ static ICE_noinline int unmap_and_move(n
> goto out;
>
> rc = __unmap_and_move(page, newpage, force, mode);
> + if (rc == MIGRATEPAGE_SUCCESS)
> + put_new_page = NULL;
>
> out:
> if (rc != -EAGAIN) {
> @@ -981,7 +984,7 @@ out:
> * it. Otherwise, putback_lru_page() will drop the reference grabbed
> * during isolation.
> */
> - if (rc != MIGRATEPAGE_SUCCESS && put_new_page) {
> + if (put_new_page) {
> ClearPageSwapBacked(newpage);
> put_new_page(newpage, private);
> } else if (unlikely(__is_movable_balloon_page(newpage))) {
> @@ -1022,7 +1025,7 @@ static int unmap_and_move_huge_page(new_
> struct page *hpage, int force,
> enum migrate_mode mode)
> {
> - int rc = 0;
> + int rc = -EAGAIN;
> int *result = NULL;
> int page_was_mapped = 0;
> struct page *new_hpage;
> @@ -1044,8 +1047,6 @@ static int unmap_and_move_huge_page(new_
> if (!new_hpage)
> return -ENOMEM;
>
> - rc = -EAGAIN;
> -
> if (!trylock_page(hpage)) {
> if (!force || mode != MIGRATE_SYNC)
> goto out;
> @@ -1070,8 +1071,10 @@ static int unmap_and_move_huge_page(new_
> if (anon_vma)
> put_anon_vma(anon_vma);
>
> - if (rc == MIGRATEPAGE_SUCCESS)
> + if (rc == MIGRATEPAGE_SUCCESS) {
> hugetlb_cgroup_migrate(hpage, new_hpage);
> + put_new_page = NULL;
> + }
>
> unlock_page(hpage);
> out:
> @@ -1083,7 +1086,7 @@ out:
> * it. Otherwise, put_page() will drop the reference grabbed during
> * isolation.
> */
> - if (rc != MIGRATEPAGE_SUCCESS && put_new_page)
> + if (put_new_page)
> put_new_page(new_hpage, private);
> else
> putback_active_hugepage(new_hpage);
>
> --
> 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>
>
--
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>
next prev parent reply other threads:[~2015-11-05 18:31 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-19 4:44 [PATCH 0/12] mm: page migration cleanups, and a little mlock Hugh Dickins
2015-10-19 4:45 ` [PATCH 1/12] mm Documentation: undoc non-linear vmas Hugh Dickins
2015-10-19 9:16 ` Kirill A. Shutemov
2015-11-05 17:29 ` Vlastimil Babka
2015-10-19 4:50 ` [PATCH 2/12] mm: rmap use pte lock not mmap_sem to set PageMlocked Hugh Dickins
2015-10-19 6:23 ` Vlastimil Babka
2015-10-19 11:20 ` Hugh Dickins
2015-10-19 12:33 ` Vlastimil Babka
2015-10-19 19:17 ` Hugh Dickins
2015-10-19 20:52 ` Vlastimil Babka
2015-10-19 13:13 ` Kirill A. Shutemov
2015-10-19 19:53 ` Hugh Dickins
2015-10-19 20:10 ` Kirill A. Shutemov
2015-10-19 21:25 ` Vlastimil Babka
2015-10-19 21:53 ` Kirill A. Shutemov
2015-10-21 23:26 ` Hugh Dickins
2015-10-29 18:49 ` [PATCH v2 " Hugh Dickins
2015-11-05 17:50 ` Vlastimil Babka
2015-10-19 23:30 ` [PATCH " Davidlohr Bueso
2015-10-19 4:52 ` [PATCH 3/12] mm: page migration fix PageMlocked on migrated pages Hugh Dickins
2015-11-05 18:18 ` Vlastimil Babka
2015-10-19 4:54 ` [PATCH 4/12] mm: rename mem_cgroup_migrate to mem_cgroup_replace_page Hugh Dickins
2015-10-19 12:35 ` Johannes Weiner
2015-12-02 9:33 ` [PATCH] mm: fix kerneldoc on mem_cgroup_replace_page Hugh Dickins
2015-12-02 10:17 ` Michal Hocko
2015-12-02 16:57 ` Johannes Weiner
2015-10-19 4:55 ` [PATCH 5/12] mm: correct a couple of page migration comments Hugh Dickins
2015-10-21 17:53 ` Rafael Aquini
2015-10-19 4:57 ` [PATCH 6/12] mm: page migration use the put_new_page whenever necessary Hugh Dickins
2015-11-05 18:31 ` Vlastimil Babka [this message]
2015-11-08 21:17 ` Hugh Dickins
2015-10-19 4:59 ` [PATCH 7/12] mm: page migration trylock newpage at same level as oldpage Hugh Dickins
2015-10-21 17:54 ` Rafael Aquini
2015-10-19 5:01 ` [PATCH 8/12] mm: page migration remove_migration_ptes at lock+unlock level Hugh Dickins
2015-10-19 5:03 ` [PATCH 9/12] mm: simplify page migration's anon_vma comment and flow Hugh Dickins
2015-10-19 5:05 ` [PATCH 10/12] mm: page migration use migration entry for swapcache too Hugh Dickins
2015-10-22 22:35 ` Cyrill Gorcunov
2015-10-19 5:07 ` [PATCH 11/12] mm: page migration avoid touching newpage until no going back Hugh Dickins
2015-10-19 5:11 ` [PATCH 12/12] mm: migrate dirty page without clear_page_dirty_for_io etc 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=563BA087.1090402@suse.cz \
--to=vbabka@suse.cz \
--cc=akpm@linux-foundation.org \
--cc=cl@linux.com \
--cc=hughd@google.com \
--cc=linux-mm@kvack.org \
--cc=rientjes@google.com \
/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.