Messages in this thread Patch in this message | | | From | Minchan Kim <> | Subject | [PATCH] mm: fix NR_ISOLATED_[ANON|FILE] mismatch | Date | Wed, 19 Sep 2012 16:45:35 +0900 |
| |
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); return err; } -- 1.7.9.5
| |