On Wed, Sep 19, 2012 at 3:45 AM, Minchan Kim <minchan@xxxxxxxxxx> 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@xxxxxxxxxxxxxx> > Cc: Mel Gorman <mgorman@xxxxxxx> > Cc: Christoph Lameter <cl@xxxxxxxxx> > Signed-off-by: Minchan Kim <minchan@xxxxxxxxxx> > --- > 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@xxxxxxxxx> Date: Tue Oct 26 14:21:32 2010 -0700 mm/mempolicy.c: check return code of check_range -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>