diff options
Diffstat (limited to 'mm/readahead.c')
-rw-r--r-- | mm/readahead.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/mm/readahead.c b/mm/readahead.c index ba7db816f4c8..1ba736ac0367 100644 --- a/mm/readahead.c +++ b/mm/readahead.c | |||
@@ -119,8 +119,7 @@ static inline unsigned long get_next_ra_size(struct file_ra_state *ra) | |||
119 | #define list_to_page(head) (list_entry((head)->prev, struct page, lru)) | 119 | #define list_to_page(head) (list_entry((head)->prev, struct page, lru)) |
120 | 120 | ||
121 | /** | 121 | /** |
122 | * read_cache_pages - populate an address space with some pages, and | 122 | * read_cache_pages - populate an address space with some pages & start reads against them |
123 | * start reads against them. | ||
124 | * @mapping: the address_space | 123 | * @mapping: the address_space |
125 | * @pages: The address of a list_head which contains the target pages. These | 124 | * @pages: The address of a list_head which contains the target pages. These |
126 | * pages have their ->index populated and are otherwise uninitialised. | 125 | * pages have their ->index populated and are otherwise uninitialised. |
@@ -183,14 +182,11 @@ static int read_pages(struct address_space *mapping, struct file *filp, | |||
183 | list_del(&page->lru); | 182 | list_del(&page->lru); |
184 | if (!add_to_page_cache(page, mapping, | 183 | if (!add_to_page_cache(page, mapping, |
185 | page->index, GFP_KERNEL)) { | 184 | page->index, GFP_KERNEL)) { |
186 | ret = mapping->a_ops->readpage(filp, page); | 185 | mapping->a_ops->readpage(filp, page); |
187 | if (ret != AOP_TRUNCATED_PAGE) { | 186 | if (!pagevec_add(&lru_pvec, page)) |
188 | if (!pagevec_add(&lru_pvec, page)) | 187 | __pagevec_lru_add(&lru_pvec); |
189 | __pagevec_lru_add(&lru_pvec); | 188 | } else |
190 | continue; | 189 | page_cache_release(page); |
191 | } /* else fall through to release */ | ||
192 | } | ||
193 | page_cache_release(page); | ||
194 | } | 190 | } |
195 | pagevec_lru_add(&lru_pvec); | 191 | pagevec_lru_add(&lru_pvec); |
196 | ret = 0; | 192 | ret = 0; |
@@ -395,8 +391,8 @@ int do_page_cache_readahead(struct address_space *mapping, struct file *filp, | |||
395 | * Read 'nr_to_read' pages starting at page 'offset'. If the flag 'block' | 391 | * Read 'nr_to_read' pages starting at page 'offset'. If the flag 'block' |
396 | * is set wait till the read completes. Otherwise attempt to read without | 392 | * is set wait till the read completes. Otherwise attempt to read without |
397 | * blocking. | 393 | * blocking. |
398 | * Returns 1 meaning 'success' if read is succesfull without switching off | 394 | * Returns 1 meaning 'success' if read is successful without switching off |
399 | * readhaead mode. Otherwise return failure. | 395 | * readahead mode. Otherwise return failure. |
400 | */ | 396 | */ |
401 | static int | 397 | static int |
402 | blockable_page_cache_readahead(struct address_space *mapping, struct file *filp, | 398 | blockable_page_cache_readahead(struct address_space *mapping, struct file *filp, |