On Wed, Sep 19, 2012 at 3:45 AM, Minchan Kim <minc...@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.motoh...@jp.fujitsu.com> > Cc: Mel Gorman <mgor...@suse.de> > Cc: Christoph Lameter <c...@linux.com> > Signed-off-by: Minchan Kim <minc...@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 <sego...@gmail.com> Date: Tue Oct 26 14:21:32 2010 -0700 mm/mempolicy.c: check return code of check_range -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/