From: Alexander Duyck <alexander.duyck@gmail.com>
To: alex.shi@linux.alibaba.com
Cc: yang.shi@linux.alibaba.com, lkp@intel.com, rong.a.chen@intel.com,
khlebnikov@yandex-team.ru, kirill@shutemov.name,
hughd@google.com, linux-kernel@vger.kernel.org,
alexander.duyck@gmail.com, daniel.m.jordan@oracle.com,
linux-mm@kvack.org, shakeelb@google.com, willy@infradead.org,
hannes@cmpxchg.org, tj@kernel.org, cgroups@vger.kernel.org,
akpm@linux-foundation.org, richard.weiyang@gmail.com,
mgorman@techsingularity.net, iamjoonsoo.kim@lge.com
Subject: [RFC PATCH v2 3/5] mm: Add explicit page decrement in exception path for isolate_lru_pages
Date: Tue, 18 Aug 2020 21:27:22 -0700 [thread overview]
Message-ID: <20200819042722.23414.2654.stgit@localhost.localdomain> (raw)
In-Reply-To: <20200819041852.23414.95939.stgit@localhost.localdomain>
From: Alexander Duyck <alexander.h.duyck@linux.intel.com>
In isolate_lru_pages we have an exception path where if we call
get_page_unless_zero and that succeeds, but TestClearPageLRU fails we call
put_page. Normally this would be problematic but due to the way that the
calls are ordered and the fact that we are holding the LRU lock we know
that the caller must be holding another reference for the page. Since we
can assume that we can replace the put_page with a call to
put_page_testzero contained within a WARN_ON. By doing this we should see
if we ever leak a page as a result of the reference count somehow hitting
zero when it shouldn't, and can avoid the overhead and confusion of using
the full put_page call.
Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
---
mm/vmscan.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 5bc0c2322043..3ebe3f9b653b 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1688,10 +1688,13 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
if (!TestClearPageLRU(page)) {
/*
- * This page may in other isolation path,
- * but we still hold lru_lock.
+ * This page is being isolated in another
+ * thread, but we still hold lru_lock. The
+ * other thread must be holding a reference
+ * to the page so this should never hit a
+ * reference count of 0.
*/
- put_page(page);
+ WARN_ON(put_page_testzero(page));
goto busy;
}
next prev parent reply other threads:[~2020-08-19 4:27 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-19 4:26 [RFC PATCH v2 0/5] Minor cleanups and performance optimizations for LRU rework Alexander Duyck
2020-08-19 4:27 ` [RFC PATCH v2 1/5] mm: Identify compound pages sooner in isolate_migratepages_block Alexander Duyck
2020-08-19 7:48 ` Alex Shi
2020-08-19 11:43 ` Matthew Wilcox
2020-08-19 14:48 ` Alexander Duyck
2020-08-19 4:27 ` [RFC PATCH v2 2/5] mm: Drop use of test_and_set_skip in favor of just setting skip Alexander Duyck
2020-08-19 7:50 ` Alex Shi
2020-08-19 4:27 ` Alexander Duyck [this message]
2020-08-19 7:50 ` [RFC PATCH v2 3/5] mm: Add explicit page decrement in exception path for isolate_lru_pages Alex Shi
2020-08-19 14:52 ` Alexander Duyck
2020-08-19 4:27 ` [RFC PATCH v2 4/5] mm: Split release_pages work into 3 passes Alexander Duyck
2020-08-19 7:53 ` Alex Shi
2020-08-19 14:57 ` Alexander Duyck
2020-08-20 9:49 ` Alex Shi
2020-08-20 14:13 ` Alexander Duyck
2020-08-19 4:27 ` [RFC PATCH v2 5/5] mm: Split move_pages_to_lru into 3 separate passes Alexander Duyck
2020-08-19 7:56 ` Alex Shi
2020-08-19 14:42 ` Alexander Duyck
2020-08-20 9:56 ` Alex Shi
2020-08-20 17:15 ` Alexander Duyck
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=20200819042722.23414.2654.stgit@localhost.localdomain \
--to=alexander.duyck@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=alex.shi@linux.alibaba.com \
--cc=cgroups@vger.kernel.org \
--cc=daniel.m.jordan@oracle.com \
--cc=hannes@cmpxchg.org \
--cc=hughd@google.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=khlebnikov@yandex-team.ru \
--cc=kirill@shutemov.name \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lkp@intel.com \
--cc=mgorman@techsingularity.net \
--cc=richard.weiyang@gmail.com \
--cc=rong.a.chen@intel.com \
--cc=shakeelb@google.com \
--cc=tj@kernel.org \
--cc=willy@infradead.org \
--cc=yang.shi@linux.alibaba.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox