summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-08-23 21:04:59 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2018-08-31 14:48:45 -0400
commit4ac2ee396a6f5bd5d07b2158c34727a628a1fdbf (patch)
treebda64c284ac3191c2784c00d7dce485681c41a58
parent33af068527e1cee54d6acd8cd6ba8d1d68cdd286 (diff)
bcachefs: optimize page_state_init_for_read()
-rw-r--r--fs/bcachefs/fs-io.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/fs/bcachefs/fs-io.c b/fs/bcachefs/fs-io.c
index 6b69e3a9424a..f916649568f2 100644
--- a/fs/bcachefs/fs-io.c
+++ b/fs/bcachefs/fs-io.c
@@ -772,11 +772,8 @@ static void bch2_readpages_end_io(struct bio *bio)
static inline void page_state_init_for_read(struct page *page)
{
- struct bch_page_state *s = page_state(page);
-
- BUG_ON(s->reserved);
- s->sectors = 0;
- s->compressed = 0;
+ SetPagePrivate(page);
+ page->private = 0;
}
struct readpages_iter {
@@ -804,10 +801,7 @@ static int readpages_iter_init(struct readpages_iter *iter,
while (!list_empty(pages)) {
struct page *page = list_last_entry(pages, struct page, lru);
- BUG_ON(iter->nr_pages >= nr_pages);
-
- page_state_init_for_read(page);
-
+ prefetchw(&page->flags);
iter->pages[iter->nr_pages++] = page;
list_del(&page->lru);
}
@@ -843,7 +837,6 @@ static inline struct page *readpage_iter_next(struct readpages_iter *iter)
iter->idx++;
iter->nr_added++;
- ClearPagePrivate(page);
put_page(page);
}
@@ -854,6 +847,7 @@ static inline struct page *readpage_iter_next(struct readpages_iter *iter)
out:
EBUG_ON(iter->pages[iter->idx]->index != iter->offset + iter->idx);
+ page_state_init_for_read(iter->pages[iter->idx]);
return iter->pages[iter->idx];
}