|
@@ -12,6 +12,7 @@
|
|
|
#include <linux/mount.h>
|
|
|
#include <linux/slab.h>
|
|
|
#include <linux/file.h>
|
|
|
+#include <linux/swap.h>
|
|
|
#include "internal.h"
|
|
|
|
|
|
/*
|
|
@@ -227,8 +228,7 @@ static void cachefiles_read_copier(struct fscache_operation *_op)
|
|
|
*/
|
|
|
static int cachefiles_read_backing_file_one(struct cachefiles_object *object,
|
|
|
struct fscache_retrieval *op,
|
|
|
- struct page *netpage,
|
|
|
- struct pagevec *pagevec)
|
|
|
+ struct page *netpage)
|
|
|
{
|
|
|
struct cachefiles_one_read *monitor;
|
|
|
struct address_space *bmapping;
|
|
@@ -237,8 +237,6 @@ static int cachefiles_read_backing_file_one(struct cachefiles_object *object,
|
|
|
|
|
|
_enter("");
|
|
|
|
|
|
- pagevec_reinit(pagevec);
|
|
|
-
|
|
|
_debug("read back %p{%lu,%d}",
|
|
|
netpage, netpage->index, page_count(netpage));
|
|
|
|
|
@@ -283,9 +281,7 @@ installed_new_backing_page:
|
|
|
backpage = newpage;
|
|
|
newpage = NULL;
|
|
|
|
|
|
- page_cache_get(backpage);
|
|
|
- pagevec_add(pagevec, backpage);
|
|
|
- __pagevec_lru_add_file(pagevec);
|
|
|
+ lru_cache_add_file(backpage);
|
|
|
|
|
|
read_backing_page:
|
|
|
ret = bmapping->a_ops->readpage(NULL, backpage);
|
|
@@ -452,8 +448,7 @@ int cachefiles_read_or_alloc_page(struct fscache_retrieval *op,
|
|
|
if (block) {
|
|
|
/* submit the apparently valid page to the backing fs to be
|
|
|
* read from disk */
|
|
|
- ret = cachefiles_read_backing_file_one(object, op, page,
|
|
|
- &pagevec);
|
|
|
+ ret = cachefiles_read_backing_file_one(object, op, page);
|
|
|
} else if (cachefiles_has_space(cache, 0, 1) == 0) {
|
|
|
/* there's space in the cache we can use */
|
|
|
fscache_mark_page_cached(op, page);
|
|
@@ -482,14 +477,11 @@ static int cachefiles_read_backing_file(struct cachefiles_object *object,
|
|
|
{
|
|
|
struct cachefiles_one_read *monitor = NULL;
|
|
|
struct address_space *bmapping = object->backer->d_inode->i_mapping;
|
|
|
- struct pagevec lru_pvec;
|
|
|
struct page *newpage = NULL, *netpage, *_n, *backpage = NULL;
|
|
|
int ret = 0;
|
|
|
|
|
|
_enter("");
|
|
|
|
|
|
- pagevec_init(&lru_pvec, 0);
|
|
|
-
|
|
|
list_for_each_entry_safe(netpage, _n, list, lru) {
|
|
|
list_del(&netpage->lru);
|
|
|
|
|
@@ -534,9 +526,7 @@ static int cachefiles_read_backing_file(struct cachefiles_object *object,
|
|
|
backpage = newpage;
|
|
|
newpage = NULL;
|
|
|
|
|
|
- page_cache_get(backpage);
|
|
|
- if (!pagevec_add(&lru_pvec, backpage))
|
|
|
- __pagevec_lru_add_file(&lru_pvec);
|
|
|
+ lru_cache_add_file(backpage);
|
|
|
|
|
|
reread_backing_page:
|
|
|
ret = bmapping->a_ops->readpage(NULL, backpage);
|
|
@@ -559,9 +549,7 @@ static int cachefiles_read_backing_file(struct cachefiles_object *object,
|
|
|
goto nomem;
|
|
|
}
|
|
|
|
|
|
- page_cache_get(netpage);
|
|
|
- if (!pagevec_add(&lru_pvec, netpage))
|
|
|
- __pagevec_lru_add_file(&lru_pvec);
|
|
|
+ lru_cache_add_file(netpage);
|
|
|
|
|
|
/* install a monitor */
|
|
|
page_cache_get(netpage);
|
|
@@ -643,9 +631,7 @@ static int cachefiles_read_backing_file(struct cachefiles_object *object,
|
|
|
|
|
|
fscache_mark_page_cached(op, netpage);
|
|
|
|
|
|
- page_cache_get(netpage);
|
|
|
- if (!pagevec_add(&lru_pvec, netpage))
|
|
|
- __pagevec_lru_add_file(&lru_pvec);
|
|
|
+ lru_cache_add_file(netpage);
|
|
|
|
|
|
/* the netpage is unlocked and marked up to date here */
|
|
|
fscache_end_io(op, netpage, 0);
|
|
@@ -661,8 +647,6 @@ static int cachefiles_read_backing_file(struct cachefiles_object *object,
|
|
|
|
|
|
out:
|
|
|
/* tidy up */
|
|
|
- pagevec_lru_add_file(&lru_pvec);
|
|
|
-
|
|
|
if (newpage)
|
|
|
page_cache_release(newpage);
|
|
|
if (netpage)
|