mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
mm: move handling of COW faults into DAX code
Move final handling of COW faults from generic code into DAX fault handler. That way generic code doesn't have to be aware of peculiarities of DAX locking so remove that knowledge and make locking functions private to fs/dax.c. Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Jan Kara <[email protected]> Acked-by: Kirill A. Shutemov <[email protected]> Reviewed-by: Ross Zwisler <[email protected]> Cc: Dan Williams <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
9118c0cbd4
commit
b1aa812b21
4 changed files with 34 additions and 56 deletions
13
mm/memory.c
13
mm/memory.c
|
|
@ -2845,7 +2845,7 @@ static int __do_fault(struct vm_fault *vmf)
|
|||
|
||||
ret = vma->vm_ops->fault(vma, vmf);
|
||||
if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE | VM_FAULT_RETRY |
|
||||
VM_FAULT_DAX_LOCKED | VM_FAULT_DONE_COW)))
|
||||
VM_FAULT_DONE_COW)))
|
||||
return ret;
|
||||
|
||||
if (unlikely(PageHWPoison(vmf->page))) {
|
||||
|
|
@ -3276,17 +3276,12 @@ static int do_cow_fault(struct vm_fault *vmf)
|
|||
if (ret & VM_FAULT_DONE_COW)
|
||||
return ret;
|
||||
|
||||
if (!(ret & VM_FAULT_DAX_LOCKED))
|
||||
copy_user_highpage(vmf->cow_page, vmf->page, vmf->address, vma);
|
||||
copy_user_highpage(vmf->cow_page, vmf->page, vmf->address, vma);
|
||||
__SetPageUptodate(vmf->cow_page);
|
||||
|
||||
ret |= finish_fault(vmf);
|
||||
if (!(ret & VM_FAULT_DAX_LOCKED)) {
|
||||
unlock_page(vmf->page);
|
||||
put_page(vmf->page);
|
||||
} else {
|
||||
dax_unlock_mapping_entry(vma->vm_file->f_mapping, vmf->pgoff);
|
||||
}
|
||||
unlock_page(vmf->page);
|
||||
put_page(vmf->page);
|
||||
if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE | VM_FAULT_RETRY)))
|
||||
goto uncharge_out;
|
||||
return ret;
|
||||
|
|
|
|||
Loading…
Reference in a new issue