diff options
Diffstat (limited to 'mm/filemap.c')
| -rw-r--r-- | mm/filemap.c | 32 | 
1 files changed, 32 insertions, 0 deletions
diff --git a/mm/filemap.c b/mm/filemap.c index 3ef20739e725..fd57442186cb 100644 --- a/mm/filemap.c +++ b/mm/filemap.c  | |||
| @@ -697,6 +697,38 @@ unsigned find_get_pages(struct address_space *mapping, pgoff_t start, | |||
| 697 | return ret; | 697 | return ret; | 
| 698 | } | 698 | } | 
| 699 | 699 | ||
| 700 | /** | ||
| 701 | * find_get_pages_contig - gang contiguous pagecache lookup | ||
| 702 | * @mapping: The address_space to search | ||
| 703 | * @index: The starting page index | ||
| 704 | * @nr_pages: The maximum number of pages | ||
| 705 | * @pages: Where the resulting pages are placed | ||
| 706 | * | ||
| 707 | * find_get_pages_contig() works exactly like find_get_pages(), except | ||
| 708 | * that the returned number of pages are guaranteed to be contiguous. | ||
| 709 | * | ||
| 710 | * find_get_pages_contig() returns the number of pages which were found. | ||
| 711 | */ | ||
| 712 | unsigned find_get_pages_contig(struct address_space *mapping, pgoff_t index, | ||
| 713 | unsigned int nr_pages, struct page **pages) | ||
| 714 | { | ||
| 715 | unsigned int i; | ||
| 716 | unsigned int ret; | ||
| 717 | |||
| 718 | read_lock_irq(&mapping->tree_lock); | ||
| 719 | ret = radix_tree_gang_lookup(&mapping->page_tree, | ||
| 720 | (void **)pages, index, nr_pages); | ||
| 721 | for (i = 0; i < ret; i++) { | ||
| 722 | if (pages[i]->mapping == NULL || pages[i]->index != index) | ||
| 723 | break; | ||
| 724 | |||
| 725 | page_cache_get(pages[i]); | ||
| 726 | index++; | ||
| 727 | } | ||
| 728 | read_unlock_irq(&mapping->tree_lock); | ||
| 729 | return i; | ||
| 730 | } | ||
| 731 | |||
| 700 | /* | 732 | /* | 
| 701 | * Like find_get_pages, except we only return pages which are tagged with | 733 | * Like find_get_pages, except we only return pages which are tagged with | 
| 702 | * `tag'. We update *index to index the next page for the traversal. | 734 | * `tag'. We update *index to index the next page for the traversal. | 
