thp: add compound_trans_head() helper
Cleanup some code with common compound_trans_head helper. Signed-off-by: Andrea Arcangeli <aarcange@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Johannes Weiner <jweiner@redhat.com> Cc: Marcelo Tosatti <mtosatti@redhat.com> Cc: Avi Kivity <avi@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

vanhempi
29ad768cfc
commit
22e5c47ee2
15
mm/ksm.c
15
mm/ksm.c
@@ -415,20 +415,11 @@ out:
|
||||
static struct page *page_trans_compound_anon(struct page *page)
|
||||
{
|
||||
if (PageTransCompound(page)) {
|
||||
struct page *head;
|
||||
head = compound_head(page);
|
||||
struct page *head = compound_trans_head(page);
|
||||
/*
|
||||
* head may be a dangling pointer.
|
||||
* __split_huge_page_refcount clears PageTail
|
||||
* before overwriting first_page, so if
|
||||
* PageTail is still there it means the head
|
||||
* pointer isn't dangling.
|
||||
* head may actually be splitted and freed from under
|
||||
* us but it's ok here.
|
||||
*/
|
||||
if (head != page) {
|
||||
smp_rmb();
|
||||
if (!PageTransCompound(page))
|
||||
return NULL;
|
||||
}
|
||||
if (PageAnon(head))
|
||||
return head;
|
||||
}
|
||||
|
Viittaa uudesa ongelmassa
Block a user