diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2018-08-23 21:04:59 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2018-08-31 14:48:45 -0400 |
commit | 4ac2ee396a6f5bd5d07b2158c34727a628a1fdbf (patch) | |
tree | bda64c284ac3191c2784c00d7dce485681c41a58 | |
parent | 33af068527e1cee54d6acd8cd6ba8d1d68cdd286 (diff) |
bcachefs: optimize page_state_init_for_read()
-rw-r--r-- | fs/bcachefs/fs-io.c | 14 |
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]; } |