diff options
| -rw-r--r-- | mm/filemap.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/mm/filemap.c b/mm/filemap.c index 6e1d08a2b8b9..4ef24a397684 100644 --- a/mm/filemap.c +++ b/mm/filemap.c | |||
| @@ -555,11 +555,12 @@ repeat: | |||
| 555 | page_cache_get(page); | 555 | page_cache_get(page); |
| 556 | if (TestSetPageLocked(page)) { | 556 | if (TestSetPageLocked(page)) { |
| 557 | read_unlock_irq(&mapping->tree_lock); | 557 | read_unlock_irq(&mapping->tree_lock); |
| 558 | lock_page(page); | 558 | __lock_page(page); |
| 559 | read_lock_irq(&mapping->tree_lock); | 559 | read_lock_irq(&mapping->tree_lock); |
| 560 | 560 | ||
| 561 | /* Has the page been truncated while we slept? */ | 561 | /* Has the page been truncated while we slept? */ |
| 562 | if (page->mapping != mapping || page->index != offset) { | 562 | if (unlikely(page->mapping != mapping || |
| 563 | page->index != offset)) { | ||
| 563 | unlock_page(page); | 564 | unlock_page(page); |
| 564 | page_cache_release(page); | 565 | page_cache_release(page); |
| 565 | goto repeat; | 566 | goto repeat; |
