Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

btrfs: convert lzo_decompress() to take a folio

The old page API is being gradually replaced and converted to use folio
to improve code readability and avoid repeated conversion between page
and folio. And memcpy_to_page() can be replaced with memcpy_to_folio().
But there is no memzero_folio(), but it can be replaced equivalently by
folio_zero_range().

Signed-off-by: Li Zetao <lizetao1@huawei.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>

authored by

Li Zetao and committed by
David Sterba
9f9a4e43 54c78d49

+8 -8
+1 -1
fs/btrfs/compression.c
··· 144 144 switch (type) { 145 145 case BTRFS_COMPRESS_ZLIB: return zlib_decompress(ws, data_in, page_folio(dest_page), 146 146 dest_pgoff, srclen, destlen); 147 - case BTRFS_COMPRESS_LZO: return lzo_decompress(ws, data_in, dest_page, 147 + case BTRFS_COMPRESS_LZO: return lzo_decompress(ws, data_in, page_folio(dest_page), 148 148 dest_pgoff, srclen, destlen); 149 149 case BTRFS_COMPRESS_ZSTD: return zstd_decompress(ws, data_in, dest_page, 150 150 dest_pgoff, srclen, destlen);
+1 -1
fs/btrfs/compression.h
··· 173 173 unsigned long *total_in, unsigned long *total_out); 174 174 int lzo_decompress_bio(struct list_head *ws, struct compressed_bio *cb); 175 175 int lzo_decompress(struct list_head *ws, const u8 *data_in, 176 - struct page *dest_page, unsigned long dest_pgoff, size_t srclen, 176 + struct folio *dest_folio, unsigned long dest_pgoff, size_t srclen, 177 177 size_t destlen); 178 178 struct list_head *lzo_alloc_workspace(unsigned int level); 179 179 void lzo_free_workspace(struct list_head *ws);
+6 -6
fs/btrfs/lzo.c
··· 438 438 } 439 439 440 440 int lzo_decompress(struct list_head *ws, const u8 *data_in, 441 - struct page *dest_page, unsigned long dest_pgoff, size_t srclen, 441 + struct folio *dest_folio, unsigned long dest_pgoff, size_t srclen, 442 442 size_t destlen) 443 443 { 444 444 struct workspace *workspace = list_entry(ws, struct workspace, list); 445 - struct btrfs_fs_info *fs_info = page_to_fs_info(dest_page); 445 + struct btrfs_fs_info *fs_info = folio_to_fs_info(dest_folio); 446 446 const u32 sectorsize = fs_info->sectorsize; 447 447 size_t in_len; 448 448 size_t out_len; ··· 467 467 out_len = sectorsize; 468 468 ret = lzo1x_decompress_safe(data_in, in_len, workspace->buf, &out_len); 469 469 if (unlikely(ret != LZO_E_OK)) { 470 - struct btrfs_inode *inode = BTRFS_I(dest_page->mapping->host); 470 + struct btrfs_inode *inode = folio_to_inode(dest_folio); 471 471 472 472 btrfs_err(fs_info, 473 473 "lzo decompression failed, error %d root %llu inode %llu offset %llu", 474 474 ret, btrfs_root_id(inode->root), btrfs_ino(inode), 475 - page_offset(dest_page)); 475 + folio_pos(dest_folio)); 476 476 ret = -EIO; 477 477 goto out; 478 478 } 479 479 480 480 ASSERT(out_len <= sectorsize); 481 - memcpy_to_page(dest_page, dest_pgoff, workspace->buf, out_len); 481 + memcpy_to_folio(dest_folio, dest_pgoff, workspace->buf, out_len); 482 482 /* Early end, considered as an error. */ 483 483 if (unlikely(out_len < destlen)) { 484 484 ret = -EIO; 485 - memzero_page(dest_page, dest_pgoff + out_len, destlen - out_len); 485 + folio_zero_range(dest_folio, dest_pgoff + out_len, destlen - out_len); 486 486 } 487 487 out: 488 488 return ret;