mm: skip speculative path for non-anonymous COW faults
anon_vma_prepare should not called in speculative page fault path. But a non-anonymous private COW page without anon_vma can enter it on a write. Fix it. Change-Id: I107b793392ba436fbe0f07f93f67767eaf1446e6 Signed-off-by: Vinayak Menon <vinmenon@codeaurora.org>
This commit is contained in:
parent
402c88542f
commit
eed0466ffa
1 changed files with 5 additions and 1 deletions
|
@ -4594,7 +4594,11 @@ int __handle_speculative_fault(struct mm_struct *mm, unsigned long address,
|
|||
* because vm_next and vm_prev must be safe. This can't be guaranteed
|
||||
* in the speculative path.
|
||||
*/
|
||||
if (unlikely(vma_is_anonymous(vmf.vma) && !vmf.vma->anon_vma)) {
|
||||
if (unlikely((vma_is_anonymous(vmf.vma) && !vmf.vma->anon_vma) ||
|
||||
(!vma_is_anonymous(vmf.vma) &&
|
||||
!(vmf.vma->vm_flags & VM_SHARED) &&
|
||||
(vmf.flags & FAULT_FLAG_WRITE) &&
|
||||
!vmf.vma->anon_vma))) {
|
||||
trace_spf_vma_notsup(_RET_IP_, vmf.vma, address);
|
||||
return VM_FAULT_RETRY;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue