From: Wei Yang <richardw.yang@linux.intel.com>
To: akpm@linux-foundation.org
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
mhocko@suse.com, yang.shi@linux.alibaba.com, rientjes@google.com,
Wei Yang <richardw.yang@linux.intel.com>
Subject: [Patch v2 4/4] mm/migrate.c: handle same node and add failure in the same way
Date: Wed, 22 Jan 2020 09:16:47 +0800 [thread overview]
Message-ID: <20200122011647.13636-5-richardw.yang@linux.intel.com> (raw)
In-Reply-To: <20200122011647.13636-1-richardw.yang@linux.intel.com>
When page is not queued for migration, there are two possible cases:
* page already on the target node
* failed to add to migration queue
Current code handle them differently, this leads to a behavior
inconsistency.
Usually for each page's status, we just do store for once. While for the
page already on the target node, we might store the node information for
twice:
* once when we found the page is on the target node
* second when moving the pages to target node successfully after above
action
The reason is even we don't add the page to pagelist, but store_status()
does store in a range which still contains the page.
This patch handles these two cases in the same way to reduce this
inconsistency and also make the code a little easier to read.
Signed-off-by: Wei Yang <richardw.yang@linux.intel.com>
Acked-by: Michal Hocko <mhocko@suse.com>
---
mm/migrate.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/mm/migrate.c b/mm/migrate.c
index 80d2bba57265..591f2e5caed6 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -1654,18 +1654,18 @@ static int do_pages_move(struct mm_struct *mm, nodemask_t task_nodes,
err = add_page_for_migration(mm, addr, current_node,
&pagelist, flags & MPOL_MF_MOVE_ALL);
- if (!err) {
- /* The page is already on the target node */
- err = store_status(status, i, current_node, 1);
- if (err)
- goto out_flush;
- continue;
- } else if (err > 0) {
+ if (err > 0) {
/* The page is successfully queued for migration */
continue;
}
- err = store_status(status, i, err, 1);
+ /*
+ * Two possible cases for err here:
+ * == 0: page is already on the target node, then store
+ * current_node to status
+ * < 0: failed to add page to list, then store err to status
+ */
+ err = store_status(status, i, err ? : current_node, 1);
if (err)
goto out_flush;
--
2.17.1
next prev parent reply other threads:[~2020-01-22 1:17 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-22 1:16 [Patch v2 0/4] cleanup on do_pages_move() Wei Yang
2020-01-22 1:16 ` [Patch v2 1/4] mm/migrate.c: not necessary to check start and i Wei Yang
2020-01-28 10:04 ` David Hildenbrand
2020-01-29 0:32 ` Wei Yang
2020-01-22 1:16 ` [Patch v2 2/4] mm/migrate.c: wrap do_move_pages_to_node() and store_status() Wei Yang
2020-01-28 10:14 ` David Hildenbrand
2020-01-29 0:38 ` Wei Yang
2020-01-29 9:28 ` David Hildenbrand
2020-01-29 22:00 ` Wei Yang
2020-01-22 1:16 ` [Patch v2 3/4] mm/migrate.c: check pagelist in move_pages_and_store_status() Wei Yang
2020-01-28 10:21 ` David Hildenbrand
2020-01-29 0:46 ` Wei Yang
2020-01-29 9:36 ` David Hildenbrand
2020-01-22 1:16 ` Wei Yang [this message]
2020-01-29 10:13 ` [Patch v2 4/4] mm/migrate.c: handle same node and add failure in the same way David Hildenbrand
2020-01-29 22:07 ` Wei Yang
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=20200122011647.13636-5-richardw.yang@linux.intel.com \
--to=richardw.yang@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.com \
--cc=rientjes@google.com \
--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 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.