hugetlb: acquire the i_mmap_lock before walking the prio_tree to unmap a page
authorMel Gorman <mel@csn.ul.ie>
Tue, 15 Dec 2009 01:59:53 +0000 (17:59 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 15 Dec 2009 16:53:23 +0000 (08:53 -0800)
commit4eb2b1dcd598f8489130405c81c60c289896d92a
tree87bf0dec35f55688595447de65eb95952eb3dabc
parent70da2340fbc68e91e701762f785479ab495a0869
hugetlb: acquire the i_mmap_lock before walking the prio_tree to unmap a page

When the owner of a mapping fails COW because a child process is holding a
reference, the children VMAs are walked and the page is unmapped.  The
i_mmap_lock is taken for the unmapping of the page but not the walking of
the prio_tree.  In theory, that tree could be changing if the lock is not
held.  This patch takes the i_mmap_lock properly for the duration of the
prio_tree walk.

[hugh.dickins@tiscali.co.uk: Spotted the problem in the first place]
Signed-off-by: Mel Gorman <mel@csn.ul.ie>
Acked-by: Hugh Dickins <hugh.dickins@tiscali.co.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/hugetlb.c