|
@@ -772,7 +772,11 @@ static inline unsigned long *page_table_alloc_pgste(struct mm_struct *mm,
|
|
|
__free_page(page);
|
|
|
return NULL;
|
|
|
}
|
|
|
- pgtable_page_ctor(page);
|
|
|
+ if (!pgtable_page_ctor(page)) {
|
|
|
+ kfree(mp);
|
|
|
+ __free_page(page);
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
mp->vmaddr = vmaddr & PMD_MASK;
|
|
|
INIT_LIST_HEAD(&mp->mapper);
|
|
|
page->index = (unsigned long) mp;
|
|
@@ -902,7 +906,10 @@ unsigned long *page_table_alloc(struct mm_struct *mm, unsigned long vmaddr)
|
|
|
page = alloc_page(GFP_KERNEL|__GFP_REPEAT);
|
|
|
if (!page)
|
|
|
return NULL;
|
|
|
- pgtable_page_ctor(page);
|
|
|
+ if (!pgtable_page_ctor(page)) {
|
|
|
+ __free_page(page);
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
atomic_set(&page->_mapcount, 1);
|
|
|
table = (unsigned long *) page_to_phys(page);
|
|
|
clear_table(table, _PAGE_INVALID, PAGE_SIZE);
|