diff --git a/mm/filemap.c b/mm/filemap.c index 67419f9a2a97..623550f9a9d3 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2663,14 +2663,11 @@ vm_fault_t filemap_fault(struct vm_fault *vmf) if (vmf->flags & FAULT_FLAG_SPECULATIVE) { page = find_get_page(mapping, offset); - if (unlikely(!page)) + if (unlikely(!page) || unlikely(PageReadahead(page))) return VM_FAULT_RETRY; - if (unlikely(PageReadahead(page))) - goto page_put; - if (!trylock_page(page)) - goto page_put; + return VM_FAULT_RETRY; if (unlikely(compound_head(page)->mapping != mapping)) goto page_unlock; @@ -2702,8 +2699,6 @@ vm_fault_t filemap_fault(struct vm_fault *vmf) return VM_FAULT_LOCKED; page_unlock: unlock_page(page); -page_put: - put_page(page); return VM_FAULT_RETRY; }