diff options
Diffstat (limited to 'mm/swap.c')
-rw-r--r-- | mm/swap.c | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -428,6 +428,30 @@ void pagevec_strip(struct pagevec *pvec) | |||
428 | } | 428 | } |
429 | 429 | ||
430 | /** | 430 | /** |
431 | * pagevec_swap_free - try to free swap space from the pages in a pagevec | ||
432 | * @pvec: pagevec with swapcache pages to free the swap space of | ||
433 | * | ||
434 | * The caller needs to hold an extra reference to each page and | ||
435 | * not hold the page lock on the pages. This function uses a | ||
436 | * trylock on the page lock so it may not always free the swap | ||
437 | * space associated with a page. | ||
438 | */ | ||
439 | void pagevec_swap_free(struct pagevec *pvec) | ||
440 | { | ||
441 | int i; | ||
442 | |||
443 | for (i = 0; i < pagevec_count(pvec); i++) { | ||
444 | struct page *page = pvec->pages[i]; | ||
445 | |||
446 | if (PageSwapCache(page) && trylock_page(page)) { | ||
447 | if (PageSwapCache(page)) | ||
448 | remove_exclusive_swap_page_ref(page); | ||
449 | unlock_page(page); | ||
450 | } | ||
451 | } | ||
452 | } | ||
453 | |||
454 | /** | ||
431 | * pagevec_lookup - gang pagecache lookup | 455 | * pagevec_lookup - gang pagecache lookup |
432 | * @pvec: Where the resulting pages are placed | 456 | * @pvec: Where the resulting pages are placed |
433 | * @mapping: The address_space to search | 457 | * @mapping: The address_space to search |