From: Christoph Hellwig Date: Thu, 31 Mar 2022 05:01:20 +0000 (+0200) Subject: f2fs: use read_cache_folio in f2fs_cache_compressed_page X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=d16f60a6b9cd95df3d282461d514954c02c6506c;p=users%2Fhch%2Fblock.git f2fs: use read_cache_folio in f2fs_cache_compressed_page Use read_cache_folio instead of duplicating the page cache logic in f2fs_cache_compressed_page. Signed-off-by: Christoph Hellwig --- diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c index 12a56f9e1572..cd4a6ecc5500 100644 --- a/fs/f2fs/compress.c +++ b/fs/f2fs/compress.c @@ -1762,11 +1762,29 @@ void f2fs_invalidate_compress_page(struct f2fs_sb_info *sbi, block_t blkaddr) invalidate_mapping_pages(COMPRESS_MAPPING(sbi), blkaddr, blkaddr); } +struct f2fs_compressed_fill_data { + struct page *page; + nid_t ino; +}; + +static int f2fs_fill_compressed_page(void *data, struct page *cpage) +{ + struct f2fs_compressed_fill_data *cd = data; + + set_page_private_data(cpage, cd->ino); + memcpy(page_address(cpage), page_address(cd->page), PAGE_SIZE); + SetPageUptodate(cpage); + return 0; +} + void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi, struct page *page, nid_t ino, block_t blkaddr) { - struct page *cpage; - int ret; + struct f2fs_compressed_fill_data cd = { + .page = page, + .ino = ino, + }; + struct folio *cfolio; if (!test_opt(sbi, COMPRESS_CACHE)) return; @@ -1777,32 +1795,10 @@ void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi, struct page *page, if (!f2fs_available_free_memory(sbi, COMPRESS_PAGE)) return; - cpage = find_get_page(COMPRESS_MAPPING(sbi), blkaddr); - if (cpage) { - f2fs_put_page(cpage, 0); - return; - } - - cpage = alloc_page(__GFP_NOWARN | __GFP_IO); - if (!cpage) - return; - - ret = add_to_page_cache_lru(cpage, COMPRESS_MAPPING(sbi), - blkaddr, GFP_NOFS); - if (ret) { - f2fs_put_page(cpage, 0); - return; - } - - set_page_private_data(cpage, ino); - - if (!f2fs_is_valid_blkaddr(sbi, blkaddr, DATA_GENERIC_ENHANCE_READ)) - goto out; - - memcpy(page_address(cpage), page_address(page), PAGE_SIZE); - SetPageUptodate(cpage); -out: - f2fs_put_page(cpage, 1); + cfolio = read_cache_folio(COMPRESS_MAPPING(sbi), blkaddr, + f2fs_fill_compressed_page, &cd); + if (!IS_ERR(cfolio)) + folio_put(cfolio); } bool f2fs_load_compressed_page(struct f2fs_sb_info *sbi, struct page *page,