diff options
author | Nikita Danilov <nikita@clusterfs.com> | 2006-01-06 03:11:08 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-06 11:33:26 -0500 |
commit | bbfbb7cec9dd7266534b2b4b9c8be2fa425bbfc9 (patch) | |
tree | d1949123224d1674a7192743d188ff652c964663 /mm/filemap.c | |
parent | a226f6c899799fe2c4919daa0767ac579c88f7bd (diff) |
[PATCH] find_lock_page(): call __lock_page() directly.
As find_lock_page() already checks with TestSetPageLocked() that page is
locked, there is no need to call lock_page() that will try-lock page again
(chances of page being unlocked in between are small). Call __lock_page()
directly, this saves one atomic operation.
Also, mark truncate-while-slept path as unlikely while we are here.
(akpm: ug. But this is actually a common path for normal old read()s against
a page which is under readahead I/O so ho-hum.)
Signed-off-by: Nikita Danilov <danilov@gmail.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'mm/filemap.c')
-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; |