diff options
Diffstat (limited to 'fs/cachefiles/rdwr.c')
-rw-r--r-- | fs/cachefiles/rdwr.c | 30 |
1 files changed, 7 insertions, 23 deletions
diff --git a/fs/cachefiles/rdwr.c b/fs/cachefiles/rdwr.c index 317f9ee9c991..ebaff368120d 100644 --- a/fs/cachefiles/rdwr.c +++ b/fs/cachefiles/rdwr.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <linux/mount.h> | 12 | #include <linux/mount.h> |
13 | #include <linux/slab.h> | 13 | #include <linux/slab.h> |
14 | #include <linux/file.h> | 14 | #include <linux/file.h> |
15 | #include <linux/swap.h> | ||
15 | #include "internal.h" | 16 | #include "internal.h" |
16 | 17 | ||
17 | /* | 18 | /* |
@@ -227,8 +228,7 @@ static void cachefiles_read_copier(struct fscache_operation *_op) | |||
227 | */ | 228 | */ |
228 | static int cachefiles_read_backing_file_one(struct cachefiles_object *object, | 229 | static int cachefiles_read_backing_file_one(struct cachefiles_object *object, |
229 | struct fscache_retrieval *op, | 230 | struct fscache_retrieval *op, |
230 | struct page *netpage, | 231 | struct page *netpage) |
231 | struct pagevec *pagevec) | ||
232 | { | 232 | { |
233 | struct cachefiles_one_read *monitor; | 233 | struct cachefiles_one_read *monitor; |
234 | struct address_space *bmapping; | 234 | struct address_space *bmapping; |
@@ -237,8 +237,6 @@ static int cachefiles_read_backing_file_one(struct cachefiles_object *object, | |||
237 | 237 | ||
238 | _enter(""); | 238 | _enter(""); |
239 | 239 | ||
240 | pagevec_reinit(pagevec); | ||
241 | |||
242 | _debug("read back %p{%lu,%d}", | 240 | _debug("read back %p{%lu,%d}", |
243 | netpage, netpage->index, page_count(netpage)); | 241 | netpage, netpage->index, page_count(netpage)); |
244 | 242 | ||
@@ -283,9 +281,7 @@ installed_new_backing_page: | |||
283 | backpage = newpage; | 281 | backpage = newpage; |
284 | newpage = NULL; | 282 | newpage = NULL; |
285 | 283 | ||
286 | page_cache_get(backpage); | 284 | lru_cache_add_file(backpage); |
287 | pagevec_add(pagevec, backpage); | ||
288 | __pagevec_lru_add_file(pagevec); | ||
289 | 285 | ||
290 | read_backing_page: | 286 | read_backing_page: |
291 | ret = bmapping->a_ops->readpage(NULL, backpage); | 287 | ret = bmapping->a_ops->readpage(NULL, backpage); |
@@ -452,8 +448,7 @@ int cachefiles_read_or_alloc_page(struct fscache_retrieval *op, | |||
452 | if (block) { | 448 | if (block) { |
453 | /* submit the apparently valid page to the backing fs to be | 449 | /* submit the apparently valid page to the backing fs to be |
454 | * read from disk */ | 450 | * read from disk */ |
455 | ret = cachefiles_read_backing_file_one(object, op, page, | 451 | ret = cachefiles_read_backing_file_one(object, op, page); |
456 | &pagevec); | ||
457 | } else if (cachefiles_has_space(cache, 0, 1) == 0) { | 452 | } else if (cachefiles_has_space(cache, 0, 1) == 0) { |
458 | /* there's space in the cache we can use */ | 453 | /* there's space in the cache we can use */ |
459 | fscache_mark_page_cached(op, page); | 454 | fscache_mark_page_cached(op, page); |
@@ -482,14 +477,11 @@ static int cachefiles_read_backing_file(struct cachefiles_object *object, | |||
482 | { | 477 | { |
483 | struct cachefiles_one_read *monitor = NULL; | 478 | struct cachefiles_one_read *monitor = NULL; |
484 | struct address_space *bmapping = object->backer->d_inode->i_mapping; | 479 | struct address_space *bmapping = object->backer->d_inode->i_mapping; |
485 | struct pagevec lru_pvec; | ||
486 | struct page *newpage = NULL, *netpage, *_n, *backpage = NULL; | 480 | struct page *newpage = NULL, *netpage, *_n, *backpage = NULL; |
487 | int ret = 0; | 481 | int ret = 0; |
488 | 482 | ||
489 | _enter(""); | 483 | _enter(""); |
490 | 484 | ||
491 | pagevec_init(&lru_pvec, 0); | ||
492 | |||
493 | list_for_each_entry_safe(netpage, _n, list, lru) { | 485 | list_for_each_entry_safe(netpage, _n, list, lru) { |
494 | list_del(&netpage->lru); | 486 | list_del(&netpage->lru); |
495 | 487 | ||
@@ -534,9 +526,7 @@ static int cachefiles_read_backing_file(struct cachefiles_object *object, | |||
534 | backpage = newpage; | 526 | backpage = newpage; |
535 | newpage = NULL; | 527 | newpage = NULL; |
536 | 528 | ||
537 | page_cache_get(backpage); | 529 | lru_cache_add_file(backpage); |
538 | if (!pagevec_add(&lru_pvec, backpage)) | ||
539 | __pagevec_lru_add_file(&lru_pvec); | ||
540 | 530 | ||
541 | reread_backing_page: | 531 | reread_backing_page: |
542 | ret = bmapping->a_ops->readpage(NULL, backpage); | 532 | ret = bmapping->a_ops->readpage(NULL, backpage); |
@@ -559,9 +549,7 @@ static int cachefiles_read_backing_file(struct cachefiles_object *object, | |||
559 | goto nomem; | 549 | goto nomem; |
560 | } | 550 | } |
561 | 551 | ||
562 | page_cache_get(netpage); | 552 | lru_cache_add_file(netpage); |
563 | if (!pagevec_add(&lru_pvec, netpage)) | ||
564 | __pagevec_lru_add_file(&lru_pvec); | ||
565 | 553 | ||
566 | /* install a monitor */ | 554 | /* install a monitor */ |
567 | page_cache_get(netpage); | 555 | page_cache_get(netpage); |
@@ -643,9 +631,7 @@ static int cachefiles_read_backing_file(struct cachefiles_object *object, | |||
643 | 631 | ||
644 | fscache_mark_page_cached(op, netpage); | 632 | fscache_mark_page_cached(op, netpage); |
645 | 633 | ||
646 | page_cache_get(netpage); | 634 | lru_cache_add_file(netpage); |
647 | if (!pagevec_add(&lru_pvec, netpage)) | ||
648 | __pagevec_lru_add_file(&lru_pvec); | ||
649 | 635 | ||
650 | /* the netpage is unlocked and marked up to date here */ | 636 | /* the netpage is unlocked and marked up to date here */ |
651 | fscache_end_io(op, netpage, 0); | 637 | fscache_end_io(op, netpage, 0); |
@@ -661,8 +647,6 @@ static int cachefiles_read_backing_file(struct cachefiles_object *object, | |||
661 | 647 | ||
662 | out: | 648 | out: |
663 | /* tidy up */ | 649 | /* tidy up */ |
664 | pagevec_lru_add_file(&lru_pvec); | ||
665 | |||
666 | if (newpage) | 650 | if (newpage) |
667 | page_cache_release(newpage); | 651 | page_cache_release(newpage); |
668 | if (netpage) | 652 | if (netpage) |