All of lore.kernel.org
 help / color / mirror / Atom feed
From: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
To: linux-mm@kvack.org
Cc: Michal Hocko <mhocko@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Vlastimil Babka <vbabka@suse.cz>,
	linux-kernel@vger.kernel.org
Subject: [PATCH v1] mm: consider non-anonymous thp as unmovable page
Date: Tue,  3 Apr 2018 13:46:28 +0900	[thread overview]
Message-ID: <1522730788-24530-1-git-send-email-n-horiguchi@ah.jp.nec.com> (raw)

My testing for the latest kernel supporting thp migration found out an
infinite loop in offlining the memory block that is filled with shmem
thps.  We can get out of the loop with a signal, but kernel should
return with failure in this case.

What happens in the loop is that scan_movable_pages() repeats returning
the same pfn without any progress. That's because page migration always
fails for shmem thps.

In memory offline code, memory blocks containing unmovable pages should
be prevented from being offline targets by has_unmovable_pages() inside
start_isolate_page_range(). So this patch simply does it for
non-anonymous thps.

Fixes: commit 72b39cfc4d75 ("mm, memory_hotplug: do not fail offlining too early")
Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: stable@vger.kernel.org # v4.15+
---
Actually I'm not sure which commit we should set to "Fixes" tag.
Commit 8135d8926c08 ("mm: memory_hotplug: memory hotremove supports thp
migration") failed to introduce the code that this patch is suggesting.
But the infinite loop became visible by commit 72b39cfc4d75 ("mm,
memory_hotplug: do not fail offlining too early") where retry code was
removed.
---
 mm/page_alloc.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git v4.16-rc7-mmotm-2018-03-28-16-05/mm/page_alloc.c v4.16-rc7-mmotm-2018-03-28-16-05_patched/mm/page_alloc.c
index 905db9d..dbbe8fa 100644
--- v4.16-rc7-mmotm-2018-03-28-16-05/mm/page_alloc.c
+++ v4.16-rc7-mmotm-2018-03-28-16-05_patched/mm/page_alloc.c
@@ -7682,6 +7682,18 @@ bool has_unmovable_pages(struct zone *zone, struct page *page, int count,
 
 		if (!PageLRU(page))
 			found++;
+
+		/*
+		 * Thp migration is available only for anonymous thps for now.
+		 * So let's consider non-anonymous thps as unmovable pages.
+		 */
+		if (PageTransCompound(page)) {
+			if (PageAnon(page))
+				iter += (1 << page_order(page)) - 1;
+			else
+				found++;
+		}
+
 		/*
 		 * If there are RECLAIMABLE pages, we need to check
 		 * it.  But now, memory offline itself doesn't call
-- 
2.7.0

             reply	other threads:[~2018-04-03  4:46 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-03  4:46 Naoya Horiguchi [this message]
2018-04-03  7:59 ` [PATCH v1] mm: consider non-anonymous thp as unmovable page Michal Hocko
2018-04-03  8:24   ` Naoya Horiguchi
2018-04-03  8:34     ` Michal Hocko
2018-04-03 10:54       ` Kirill A. Shutemov
2018-04-03 10:58         ` Michal Hocko
2018-04-03 11:16           ` Kirill A. Shutemov
2018-04-03 11:33             ` Michal Hocko
2018-04-05  8:59         ` Michal Hocko
2018-04-05 12:28           ` Kirill A. Shutemov
2018-04-05 12:48             ` Michal Hocko
2018-04-05 13:40               ` Kirill A. Shutemov
2018-04-05 15:05                 ` Michal Hocko
2018-04-05 15:55                   ` Kirill A. Shutemov
2018-04-05 16:03                     ` Michal Hocko
2018-04-05 17:58                       ` Zi Yan
2018-04-05 19:04                         ` Michal Hocko
2018-04-05 19:09                           ` Zi Yan
2018-04-06  3:07                       ` [PATCH] mm: shmem: enable thp migration (Re: [PATCH v1] mm: consider non-anonymous thp as unmovable page) Naoya Horiguchi
2018-04-06  3:07                         ` Naoya Horiguchi
2018-04-06  5:14                         ` Naoya Horiguchi
2018-04-06  7:08                           ` Michal Hocko
2018-04-06  7:08                             ` Michal Hocko
2018-04-09  7:14                             ` Naoya Horiguchi
2018-04-10 11:16                         ` Kirill A. Shutemov
2018-04-11  9:26                         ` Michal Hocko
2018-04-11 19:27                           ` Andrew Morton
2018-04-11 19:43                             ` Michal Hocko
2018-04-23  3:03                         ` Matthew Wilcox
2018-04-23  7:21                           ` Naoya Horiguchi
2018-04-05 16:42 ` [PATCH v1] mm: consider non-anonymous thp as unmovable page Sasha Levin

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=1522730788-24530-1-git-send-email-n-horiguchi@ah.jp.nec.com \
    --to=n-horiguchi@ah.jp.nec.com \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@kernel.org \
    --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.