Commit a978d6f5 authored by Nick Piggin's avatar Nick Piggin Committed by Linus Torvalds

mm: unlockless reclaim

unlock_page is fairly expensive.  It can be avoided in page reclaim
success path.  By definition if we have any other references to the page
it would be a bug anyway.
Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
Reviewed-by: default avatarKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent f45840b5
...@@ -732,7 +732,14 @@ static unsigned long shrink_page_list(struct list_head *page_list, ...@@ -732,7 +732,14 @@ static unsigned long shrink_page_list(struct list_head *page_list,
if (!mapping || !__remove_mapping(mapping, page)) if (!mapping || !__remove_mapping(mapping, page))
goto keep_locked; goto keep_locked;
unlock_page(page); /*
* At this point, we have no other references and there is
* no way to pick any more up (removed from LRU, removed
* from pagecache). Can use non-atomic bitops now (and
* we obviously don't have to worry about waking up a process
* waiting on the page lock, because there are no references.
*/
__clear_page_locked(page);
free_it: free_it:
nr_reclaimed++; nr_reclaimed++;
if (!pagevec_add(&freed_pvec, page)) { if (!pagevec_add(&freed_pvec, page)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment