mm: add orig_pte field into vm_fault
Add orig_pte field to vm_fault structure to allow ->page_mkwrite handlers to fully handle the fault. This also allows us to save some passing of extra arguments around. Link: http://lkml.kernel.org/r/1479460644-25076-8-git-send-email-jack@suse.cz Signed-off-by: Jan Kara <jack@suse.cz> Reviewed-by: Ross Zwisler <ross.zwisler@linux.intel.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
このコミットが含まれているのは:
@@ -875,7 +875,6 @@ static bool __collapse_huge_page_swapin(struct mm_struct *mm,
|
||||
unsigned long address, pmd_t *pmd,
|
||||
int referenced)
|
||||
{
|
||||
pte_t pteval;
|
||||
int swapped_in = 0, ret = 0;
|
||||
struct vm_fault vmf = {
|
||||
.vma = vma,
|
||||
@@ -893,11 +892,11 @@ static bool __collapse_huge_page_swapin(struct mm_struct *mm,
|
||||
vmf.pte = pte_offset_map(pmd, address);
|
||||
for (; vmf.address < address + HPAGE_PMD_NR*PAGE_SIZE;
|
||||
vmf.pte++, vmf.address += PAGE_SIZE) {
|
||||
pteval = *vmf.pte;
|
||||
if (!is_swap_pte(pteval))
|
||||
vmf.orig_pte = *vmf.pte;
|
||||
if (!is_swap_pte(vmf.orig_pte))
|
||||
continue;
|
||||
swapped_in++;
|
||||
ret = do_swap_page(&vmf, pteval);
|
||||
ret = do_swap_page(&vmf);
|
||||
|
||||
/* do_swap_page returns VM_FAULT_RETRY with released mmap_sem */
|
||||
if (ret & VM_FAULT_RETRY) {
|
||||
|
新しいイシューから参照
ユーザーをブロックする