diff --git a/mm/filemap.c b/mm/filemap.c index 6e1d08a2b8b9e1f8f690b91e2510f60070fecb55..4ef24a397684f7b9a51c70e94843f4cff35ed281 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -555,11 +555,12 @@ struct page *find_lock_page(struct address_space *mapping, page_cache_get(page); if (TestSetPageLocked(page)) { read_unlock_irq(&mapping->tree_lock); - lock_page(page); + __lock_page(page); read_lock_irq(&mapping->tree_lock); /* Has the page been truncated while we slept? */ - if (page->mapping != mapping || page->index != offset) { + if (unlikely(page->mapping != mapping || + page->index != offset)) { unlock_page(page); page_cache_release(page); goto repeat;