Messages in this thread | | | From | KOSAKI Motohiro <> | Date | Wed, 19 Sep 2012 13:04:56 -0400 | Subject | Re: [PATCH] mm: fix NR_ISOLATED_[ANON|FILE] mismatch |
| |
On Wed, Sep 19, 2012 at 3:45 AM, Minchan Kim <minchan@kernel.org> wrote: > When I looked at zone stat mismatch problem, I found > migrate_to_node doesn't decrease NR_ISOLATED_[ANON|FILE] > if check_range fails. > > It can make system hang out. > > Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> > Cc: Mel Gorman <mgorman@suse.de> > Cc: Christoph Lameter <cl@linux.com> > Signed-off-by: Minchan Kim <minchan@kernel.org> > --- > mm/mempolicy.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/mm/mempolicy.c b/mm/mempolicy.c > index 3d64b36..6bf0860 100644 > --- a/mm/mempolicy.c > +++ b/mm/mempolicy.c > @@ -953,16 +953,16 @@ static int migrate_to_node(struct mm_struct *mm, int source, int dest, > > vma = check_range(mm, mm->mmap->vm_start, mm->task_size, &nmask, > flags | MPOL_MF_DISCONTIG_OK, &pagelist); > - if (IS_ERR(vma)) > - return PTR_ERR(vma); > - > - if (!list_empty(&pagelist)) { > + if (IS_ERR(vma)) { > + err = PTR_ERR(vma); > + goto out; > + } > + if (!list_empty(&pagelist)) > err = migrate_pages(&pagelist, new_node_page, dest, > false, MIGRATE_SYNC); > - if (err) > - putback_lru_pages(&pagelist); > - } > - > +out: > + if (err) > + putback_lru_pages(&pagelist);
Good catch! This is a regression since following commit. So, I doubt we need all or nothing semantics. Can we revert it instead? (and probably we need more kind comment for preventing an accident)
commit 0def08e3acc2c9c934e4671487029aed52202d42 Author: Vasiliy Kulikov <segooon@gmail.com> Date: Tue Oct 26 14:21:32 2010 -0700
mm/mempolicy.c: check return code of check_range
| |