Skip to contentSkip to conversation

mm: fix NR_ISOLATED_[ANON|FILE] mismatch

PATCH Minchan Kim 2 participants 2 messages Sep 20, 2012 – Sep 21, 2012 Memory management

lore
Share & tools
lore
#0 lore raw
Quoted 67 lines · Johannes Weiner
Quoted 45 lines · Minchan Kim

From: Minchan Kim <[email protected]>
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 <[email protected]>
Cc Mel Gorman <[email protected]>
Cc Christoph Lameter <[email protected]>
Cc David Rientjes <[email protected]>
Cc Vasiliy Kulikov <[email protected]>
---
 mm/mempolicy.c |    9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)
mm/mempolicy.c +0 -0
index 3d64b36..9ec87bd 100644
@@ -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;

mm/mempolicy.c static int migrate_to_node(struct mm_struct *mm, int source, int dest, · line 956

Quoted 10 lines
mm/mempolicy.c +4 -2
-	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

Quoted 7 lines

/*
* 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,

#1 lore raw
Quoted 6 lines · Minchan Kim
Quoted 5 lines · Johannes Weiner
Quoted 4 lines · Minchan Kim

From: Minchan Kim <[email protected]>
Date: Thu, 20 Sep 2012 08:39:52 +0900
Subject: [PATCH] mm: revert 0def08e3, mm/mempolicy.c: check return code of
check_range

[...]

Quoted 4 lines

From: Minchan Kim <[email protected]>
Date: Fri, 21 Sep 2012 08:17:37 +0900
Subject: [PATCH] mm: enhance comment and bug check

Quoted 8 lines

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

Thanks! To the patch and this update:

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>