All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wei Yang <richardw.yang@linux.intel.com>
To: David Hildenbrand <david@redhat.com>
Cc: Wei Yang <richardw.yang@linux.intel.com>,
	akpm@linux-foundation.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org, mhocko@suse.com,
	yang.shi@linux.alibaba.com, rientjes@google.com
Subject: Re: [Patch v2 4/4] mm/migrate.c: handle same node and add failure in the same way
Date: Thu, 30 Jan 2020 06:07:23 +0800	[thread overview]
Message-ID: <20200129220723.GC20736@richard> (raw)
In-Reply-To: <17796dbb-b9b6-9481-5048-addfa5eec51e@redhat.com>

On Wed, Jan 29, 2020 at 11:13:23AM +0100, David Hildenbrand wrote:
>On 22.01.20 02:16, Wei Yang wrote:
>> 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.
>> 
>
>I'd rephrase to
>
>"mm/migrate.c: unify "not queued for migration" handling in do_pages_move()
>
>It can currently happen that we store the status of a page twice:
>* Once we detect that it is already on the target node
>* Once we moved a bunch of pages, and a page that's already on the
>  target node is contained in the current interval.
>
>Let's simplify the code and always call do_move_pages_to_node() in
>case we did not queue a page for migration. Note that pages that are
>already on the target node are not added to the pagelist and are,
>therefore, ignored by do_move_pages_to_node() - there is no functional
>change.
>
>The status of such a page is now only stored once.
>"
>
>> 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
>> +		 */
>
>I'd shorten that to
>
>/*
> * If the page is already on the target node (!err), store the node,
> * otherwise, store the err.
>*/
>
>> +		err = store_status(status, i, err ? : current_node, 1);
>>  		if (err)
>>  			goto out_flush;
>>  
>> 
>
>Thanks!
>
>Reviewed-by: David Hildenbrand <david@redhat.com>
>

Yep, thanks.

I would take this :-)

>-- 
>Thanks,
>
>David / dhildenb

-- 
Wei Yang
Help you, Help me


      reply	other threads:[~2020-01-29 22:07 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 ` [Patch v2 4/4] mm/migrate.c: handle same node and add failure in the same way Wei Yang
2020-01-29 10:13   ` David Hildenbrand
2020-01-29 22:07     ` Wei Yang [this message]

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=20200129220723.GC20736@richard \
    --to=richardw.yang@linux.intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=david@redhat.com \
    --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.