All of lore.kernel.org
 help / color / mirror / Atom feed
From: Minchan Kim <minchan@kernel.org>
To: Johannes Weiner <hannes@cmpxchg.org>,
	Andrew Morton <akpm@linux-foundation.org>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Mel Gorman <mgorman@suse.de>, Christoph Lameter <cl@linux.com>,
	David Rientjes <rientjes@google.com>,
	Vasiliy Kulikov <segooon@gmail.com>
Subject: Re: [PATCH] mm: fix NR_ISOLATED_[ANON|FILE] mismatch
Date: Fri, 21 Sep 2012 08:24:08 +0900	[thread overview]
Message-ID: <20120920232408.GI13234@bbox> (raw)

On Thu, Sep 20, 2012 at 11:41:11AM -0400, Johannes Weiner wrote:
> On Thu, Sep 20, 2012 at 08:51:56AM +0900, Minchan Kim wrote:
> > From: Minchan Kim <minchan@kernel.org>
> > Date: Thu, 20 Sep 2012 08:39:52 +0900
> > Subject: [PATCH] mm: revert 0def08e3, mm/mempolicy.c: check return code of
> >  check_range
> > 
> > This patch reverts 0def08e3 because check_range can't fail in
> > migrate_to_node with considering current usecases.
> > 
> > Quote from Johannes
> > "
> > I think it makes sense to revert.  Not because of the semantics, but I
> > just don't see how check_range() could even fail for this callsite:
> > 
> > 1. we pass mm->mmap->vm_start in there, so we should not fail due to
> >    find_vma()
> > 
> > 2. we pass MPOL_MF_DISCONTIG_OK, so the discontig checks do not apply
> >    and so can not fail
> > 
> > 3. we pass MPOL_MF_MOVE | MPOL_MF_MOVE_ALL, the page table loops will
> >    continue until addr == end, so we never fail with -EIO
> > "
> > 
> > And I add new VM_BUG_ON for checking migrate_to_node's future usecase
> > which might pass to MPOL_MF_STRICT.
> > 
> > Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
> > Cc: Mel Gorman <mgorman@suse.de>
> > Cc: Christoph Lameter <cl@linux.com>
> > Cc: David Rientjes <rientjes@google.com>
> > Cc: Vasiliy Kulikov <segooon@gmail.com>
> > Suggested-by: Johannes Weiner <hannes@cmpxchg.org>
> > Signed-off-by: Minchan Kim <minchan@kernel.org>
> > ---
> >  mm/mempolicy.c |    9 +++++----
> >  1 file changed, 5 insertions(+), 4 deletions(-)
> > 
> > diff --git a/mm/mempolicy.c b/mm/mempolicy.c
> > index 3d64b36..9ec87bd 100644
> > --- a/mm/mempolicy.c
> > +++ b/mm/mempolicy.c
> > @@ -946,15 +946,16 @@ static int migrate_to_node(struct mm_struct *mm, int source, int dest,
> >  	nodemask_t nmask;
> >  	LIST_HEAD(pagelist);
> >  	int err = 0;
> > -	struct vm_area_struct *vma;
> >  
> >  	nodes_clear(nmask);
> >  	node_set(source, nmask);
> >  
> > -	vma = check_range(mm, mm->mmap->vm_start, mm->task_size, &nmask,
> > +	/*
> > +	 * Collect migrate pages and it shoudn't be failed.
> > +	 */
> > +	VM_BUG_ON(flags & MPOL_MF_STRICT);
> 
> Adding a check and a comment is a good idea, but I'm not a big fan of
> checking for MPOL_MF_STRICT in particular because it's one of the
> invalid inputs, and so you need to extend this check when somebody
> extends the spectrum of invalid inputs.  I would much prefer checking
> directly for !(flags & (MPOL_MF_MOVE | MPOL_MF_MOVE_ALL)) instead, which
> would also make the possible inputs apparent without having to chase
> up the call chain to find out what is usually passed in.
> 
> And how about
> 
> /*
>  * This does not "check" the range but isolates all pages that
>  * need migration.  Between passing in the full user address
>  * space range and MPOL_MF_DISCONTIG_OK, this call can not fail.
>  */
> 
> ?

Good idea. Thanks Hannes,

WARNING: multiple messages have this Message-ID (diff)
From: Minchan Kim <minchan@kernel.org>
To: Johannes Weiner <hannes@cmpxchg.org>,
	Andrew Morton <akpm@linux-foundation.org>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Mel Gorman <mgorman@suse.de>, Christoph Lameter <cl@linux.com>,
	David Rientjes <rientjes@google.com>,
	Vasiliy Kulikov <segooon@gmail.com>
Subject: Re: [PATCH] mm: fix NR_ISOLATED_[ANON|FILE] mismatch
Date: Fri, 21 Sep 2012 08:24:08 +0900	[thread overview]
Message-ID: <20120920232408.GI13234@bbox> (raw)

On Thu, Sep 20, 2012 at 11:41:11AM -0400, Johannes Weiner wrote:
> On Thu, Sep 20, 2012 at 08:51:56AM +0900, Minchan Kim wrote:
> > From: Minchan Kim <minchan@kernel.org>
> > Date: Thu, 20 Sep 2012 08:39:52 +0900
> > Subject: [PATCH] mm: revert 0def08e3, mm/mempolicy.c: check return code of
> >  check_range
> > 
> > This patch reverts 0def08e3 because check_range can't fail in
> > migrate_to_node with considering current usecases.
> > 
> > Quote from Johannes
> > "
> > I think it makes sense to revert.  Not because of the semantics, but I
> > just don't see how check_range() could even fail for this callsite:
> > 
> > 1. we pass mm->mmap->vm_start in there, so we should not fail due to
> >    find_vma()
> > 
> > 2. we pass MPOL_MF_DISCONTIG_OK, so the discontig checks do not apply
> >    and so can not fail
> > 
> > 3. we pass MPOL_MF_MOVE | MPOL_MF_MOVE_ALL, the page table loops will
> >    continue until addr == end, so we never fail with -EIO
> > "
> > 
> > And I add new VM_BUG_ON for checking migrate_to_node's future usecase
> > which might pass to MPOL_MF_STRICT.
> > 
> > Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
> > Cc: Mel Gorman <mgorman@suse.de>
> > Cc: Christoph Lameter <cl@linux.com>
> > Cc: David Rientjes <rientjes@google.com>
> > Cc: Vasiliy Kulikov <segooon@gmail.com>
> > Suggested-by: Johannes Weiner <hannes@cmpxchg.org>
> > Signed-off-by: Minchan Kim <minchan@kernel.org>
> > ---
> >  mm/mempolicy.c |    9 +++++----
> >  1 file changed, 5 insertions(+), 4 deletions(-)
> > 
> > diff --git a/mm/mempolicy.c b/mm/mempolicy.c
> > index 3d64b36..9ec87bd 100644
> > --- a/mm/mempolicy.c
> > +++ b/mm/mempolicy.c
> > @@ -946,15 +946,16 @@ static int migrate_to_node(struct mm_struct *mm, int source, int dest,
> >  	nodemask_t nmask;
> >  	LIST_HEAD(pagelist);
> >  	int err = 0;
> > -	struct vm_area_struct *vma;
> >  
> >  	nodes_clear(nmask);
> >  	node_set(source, nmask);
> >  
> > -	vma = check_range(mm, mm->mmap->vm_start, mm->task_size, &nmask,
> > +	/*
> > +	 * Collect migrate pages and it shoudn't be failed.
> > +	 */
> > +	VM_BUG_ON(flags & MPOL_MF_STRICT);
> 
> Adding a check and a comment is a good idea, but I'm not a big fan of
> checking for MPOL_MF_STRICT in particular because it's one of the
> invalid inputs, and so you need to extend this check when somebody
> extends the spectrum of invalid inputs.  I would much prefer checking
> directly for !(flags & (MPOL_MF_MOVE | MPOL_MF_MOVE_ALL)) instead, which
> would also make the possible inputs apparent without having to chase
> up the call chain to find out what is usually passed in.
> 
> And how about
> 
> /*
>  * This does not "check" the range but isolates all pages that
>  * need migration.  Between passing in the full user address
>  * space range and MPOL_MF_DISCONTIG_OK, this call can not fail.
>  */
> 
> ?

Good idea. Thanks Hannes,

>From 13ae84083ac1f057eafbeae49efba862aa7a470e Mon Sep 17 00:00:00 2001
From: Minchan Kim <minchan@kernel.org>
Date: Fri, 21 Sep 2012 08:17:37 +0900
Subject: [PATCH] mm: enhance comment and bug check

This patch updates comment and bug check.
It can be fold into [1].

[1] mm-revert-0def08e3-mm-mempolicyc-check-return-code-of-check_range.patch

Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Suggested-by: Johannes Weiner <hannes@cmpxchg.org>
Signed-off-by: Minchan Kim <minchan@kernel.org>
---
 mm/mempolicy.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index 9ec87bd..0b78fb9 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -951,9 +951,11 @@ static int migrate_to_node(struct mm_struct *mm, int source, int dest,
 	node_set(source, nmask);
 
 	/*
-	 * Collect migrate pages and it shoudn't be failed.
+	 * This does not "check" the range but isolates all pages that
+	 * need migration.  Between passing in the full user address
+	 * space range and MPOL_MF_DISCONTIG_OK, this call can not fail.
 	 */
-	VM_BUG_ON(flags & MPOL_MF_STRICT);
+	VM_BUG_ON(!(flags & (MPOL_MF_MOVE | MPOL_MF_MOVE_ALL)));
 	check_range(mm, mm->mmap->vm_start, mm->task_size, &nmask,
 			flags | MPOL_MF_DISCONTIG_OK, &pagelist);
 
-- 
1.7.9.5

-- 
Kind regards,
Minchan Kim

             reply	other threads:[~2012-09-20 23:21 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-20 23:24 Minchan Kim [this message]
2012-09-20 23:24 ` [PATCH] mm: fix NR_ISOLATED_[ANON|FILE] mismatch Minchan Kim
2012-09-21  2:13 ` Johannes Weiner
2012-09-21  2:13   ` Johannes Weiner
  -- strict thread matches above, loose matches on Subject: below --
2012-09-19 23:51 Minchan Kim
2012-09-19 23:51 ` Minchan Kim
2012-09-20 12:36 ` KOSAKI Motohiro
2012-09-20 12:36   ` KOSAKI Motohiro
2012-09-20 15:41 ` Johannes Weiner
2012-09-20 15:41   ` Johannes Weiner
2012-09-19  7:45 Minchan Kim
2012-09-19  7:45 ` Minchan Kim
2012-09-19 17:04 ` KOSAKI Motohiro
2012-09-19 17:04   ` KOSAKI Motohiro
2012-09-19 18:28   ` Johannes Weiner
2012-09-19 18:28     ` Johannes Weiner
2012-09-19 20:38     ` Minchan Kim
2012-09-19 20:38       ` Minchan Kim

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=20120920232408.GI13234@bbox \
    --to=minchan@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=cl@linux.com \
    --cc=hannes@cmpxchg.org \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@suse.de \
    --cc=rientjes@google.com \
    --cc=segooon@gmail.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.