Commit ed54eed3 authored by Chao Yu's avatar Chao Yu Committed by Jaegeuk Kim

f2fs: convert f2fs_read_single_page() to use folio

Convert f2fs_read_single_page() to use folio and related
functionality.
Signed-off-by: default avatarChao Yu <chao@kernel.org>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent db92e6c7
...@@ -2063,7 +2063,7 @@ static inline loff_t f2fs_readpage_limit(struct inode *inode) ...@@ -2063,7 +2063,7 @@ static inline loff_t f2fs_readpage_limit(struct inode *inode)
return i_size_read(inode); return i_size_read(inode);
} }
static int f2fs_read_single_page(struct inode *inode, struct page *page, static int f2fs_read_single_page(struct inode *inode, struct folio *folio,
unsigned nr_pages, unsigned nr_pages,
struct f2fs_map_blocks *map, struct f2fs_map_blocks *map,
struct bio **bio_ret, struct bio **bio_ret,
...@@ -2076,9 +2076,10 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page, ...@@ -2076,9 +2076,10 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page,
sector_t last_block; sector_t last_block;
sector_t last_block_in_file; sector_t last_block_in_file;
sector_t block_nr; sector_t block_nr;
pgoff_t index = folio_index(folio);
int ret = 0; int ret = 0;
block_in_file = (sector_t)page_index(page); block_in_file = (sector_t)index;
last_block = block_in_file + nr_pages; last_block = block_in_file + nr_pages;
last_block_in_file = bytes_to_blks(inode, last_block_in_file = bytes_to_blks(inode,
f2fs_readpage_limit(inode) + blocksize - 1); f2fs_readpage_limit(inode) + blocksize - 1);
...@@ -2109,7 +2110,7 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page, ...@@ -2109,7 +2110,7 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page,
got_it: got_it:
if ((map->m_flags & F2FS_MAP_MAPPED)) { if ((map->m_flags & F2FS_MAP_MAPPED)) {
block_nr = map->m_pblk + block_in_file - map->m_lblk; block_nr = map->m_pblk + block_in_file - map->m_lblk;
SetPageMappedToDisk(page); folio_set_mappedtodisk(folio);
if (!f2fs_is_valid_blkaddr(F2FS_I_SB(inode), block_nr, if (!f2fs_is_valid_blkaddr(F2FS_I_SB(inode), block_nr,
DATA_GENERIC_ENHANCE_READ)) { DATA_GENERIC_ENHANCE_READ)) {
...@@ -2118,15 +2119,15 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page, ...@@ -2118,15 +2119,15 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page,
} }
} else { } else {
zero_out: zero_out:
zero_user_segment(page, 0, PAGE_SIZE); folio_zero_segment(folio, 0, folio_size(folio));
if (f2fs_need_verity(inode, page->index) && if (f2fs_need_verity(inode, index) &&
!fsverity_verify_page(page)) { !fsverity_verify_folio(folio)) {
ret = -EIO; ret = -EIO;
goto out; goto out;
} }
if (!PageUptodate(page)) if (!folio_test_uptodate(folio))
SetPageUptodate(page); folio_mark_uptodate(folio);
unlock_page(page); folio_unlock(folio);
goto out; goto out;
} }
...@@ -2136,14 +2137,14 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page, ...@@ -2136,14 +2137,14 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page,
*/ */
if (bio && (!page_is_mergeable(F2FS_I_SB(inode), bio, if (bio && (!page_is_mergeable(F2FS_I_SB(inode), bio,
*last_block_in_bio, block_nr) || *last_block_in_bio, block_nr) ||
!f2fs_crypt_mergeable_bio(bio, inode, page->index, NULL))) { !f2fs_crypt_mergeable_bio(bio, inode, index, NULL))) {
submit_and_realloc: submit_and_realloc:
f2fs_submit_read_bio(F2FS_I_SB(inode), bio, DATA); f2fs_submit_read_bio(F2FS_I_SB(inode), bio, DATA);
bio = NULL; bio = NULL;
} }
if (bio == NULL) { if (bio == NULL) {
bio = f2fs_grab_read_bio(inode, block_nr, nr_pages, bio = f2fs_grab_read_bio(inode, block_nr, nr_pages,
is_readahead ? REQ_RAHEAD : 0, page->index, is_readahead ? REQ_RAHEAD : 0, index,
false); false);
if (IS_ERR(bio)) { if (IS_ERR(bio)) {
ret = PTR_ERR(bio); ret = PTR_ERR(bio);
...@@ -2158,7 +2159,7 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page, ...@@ -2158,7 +2159,7 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page,
*/ */
f2fs_wait_on_block_writeback(inode, block_nr); f2fs_wait_on_block_writeback(inode, block_nr);
if (bio_add_page(bio, page, blocksize, 0) < blocksize) if (!bio_add_folio(bio, folio, blocksize, 0))
goto submit_and_realloc; goto submit_and_realloc;
inc_page_count(F2FS_I_SB(inode), F2FS_RD_DATA); inc_page_count(F2FS_I_SB(inode), F2FS_RD_DATA);
...@@ -2424,7 +2425,7 @@ static int f2fs_mpage_readpages(struct inode *inode, ...@@ -2424,7 +2425,7 @@ static int f2fs_mpage_readpages(struct inode *inode,
read_single_page: read_single_page:
#endif #endif
ret = f2fs_read_single_page(inode, &folio->page, max_nr_pages, &map, ret = f2fs_read_single_page(inode, folio, max_nr_pages, &map,
&bio, &last_block_in_bio, rac); &bio, &last_block_in_bio, rac);
if (ret) { if (ret) {
#ifdef CONFIG_F2FS_FS_COMPRESSION #ifdef CONFIG_F2FS_FS_COMPRESSION
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment